В моем .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
В настоящее время я нахожусь в процессе помещения файлов конфигурации, скриптов и функций моей оболочки под контроль версий. Я также недавно начал процесс удаления случайных Bashisms из сценариев оболочки, которые не извлекают выгоду из специфичных для 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
.