В моєму випадку .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.