В моєму випадку .profile
я використовую такий код, щоб переконатися, що псевдоніми та функції, пов'язані з Bash, розміщуються лише у тому випадку, якщо оболонкою входу фактично є Bash :
# If the current (login) shell is Bash, then
if [ "${BASH_VERSION:-}" ]; then
# source ~/.bashrc if it exists.
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Наразі я перебуваю під керуванням версій файлів конфігурації оболонок, сценаріїв та функцій. Нещодавно я також розпочав процес видалення випадкових башизмів із скриптів оболонки, які не користуються особливостями Bash, наприклад, заміною function funcname()
на funcname()
.
Для мого сховища файлів оболонки я налаштував гачок, що попередньо здійснює запуск, який запускає checkbashisms
утиліту з пакета devscripts Debian для кожного sh
файлу в сховищі, щоб переконатися, що я ненавмисно не ввожу специфічний для синтаксису Bash синтаксис. Однак це спричиняє помилку для мого .profile
:
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
Мені було цікаво, чи існує спосіб перевірити, яка оболонка працює, що не призведе до попередження checkbashisms
.
Я перевірив список змінних оболонок, перелічених POSIX, сподіваючись, що одна з них може використовуватись для показу поточної оболонки. Я також переглянув змінні, встановлені в інтерактивній оболонці Dash, але, знову ж таки, не вдалося знайти відповідного кандидата.
На даний момент я виключив .profile
обробку checkbashisms
; це невеликий файл, тому перевірити його вручну не важко. Однак, вивчивши проблему, я все-таки хотів би знати, чи існує метод, сумісний з POSIX, щоб визначити, яка оболонка запущена (або принаймні спосіб, який не спричиняє checkbashisms
збій).
Подальша довідка / уточнення
Однією з причин, за допомогою яких я конфігурую свої файли конфігурації оболонки під управлінням версій, - це налаштувати моє середовище на всіх системах, в які я регулярно входжу в систему: Cygwin, Ubuntu та CentOS (і 5, і 7, використовуючи Active Directory для користувача аутентифікація). Я найчастіше входжу через X Windows / настільні середовища та SSH для віддалених хостів. Однак я хотів би, щоб це було в майбутньому і мав найменшу залежність від системних залежностей та інших можливих інструментів.
Я використовую checkbashisms
як просту автоматизовану перевірку правильності для синтаксису моїх файлів, пов’язаних із оболонкою. Це не ідеальний інструмент, наприклад, я вже застосував патч до нього, щоб він не скаржився на використання command -v
в моїх сценаріях. Під час дослідження я дізнався, що фактична мета програми - забезпечити відповідність політиці Debian, яка, наскільки я розумію, базується на POSIX 2004, а не 2008 (або її перегляд 2013 року).
.bash_profile
джерела, що є джерелами, .profile
і (умовно) .bashrc
.