MyTetra Share
Делитесь знаниями!
Как сделать проверку, чтобы bash-скрипт выполнялся только в Bash?
Время создания: 25.09.2023 16:52
Текстовые метки: linux, bash, проверка
Раздел: Компьютер - Linux - Bash - Команды и скрипты
Запись: xintrea/mytetra_syncro/master/base/1695649966bnhadvugr8/text.html на raw.github.com

Иногда надо заставить пользователя выполнить скрипт именно в Bash-шелле. Не в sh, не в dash, не в zsh и не в fish, а именно в Bash, чтобы гарантированно сработали все башизмы. Как это можно обеспечить?


Прописывание Bang-строки #!/bin/bash не решает эту проблему: всегда можно запустить скрипт в другом шелле, например вызвав команду dash скрипт.sh. Каково же решение? Можно воспользоваться нижеприведенным кодом:



$ cat test_bash.sh

#!/bin/bash


[ -n "$BASH_VERSION" ] || { echo "Please run this script with bash"; exit 1; }


echo "Начинается работа bash-скрипта"



Разультат работы будет следующим:



$ ./test_bash.sh

Начинается работа bash-скрипта


$ bash test_bash.sh

Начинается работа bash-скрипта


$ sh test_bash.sh

Please run this script with bash



В скрипте используется тот факт, что при выполнении скрипта в Bash, всегда существует переменная $BASH_VERSION и она не пустая. В других шеллах эта переменная отсутсвует. Этот факт проверяется условием в квадратных скобках (if не пишется, а скобки являются алиасом утилиты test). В случае если нет переменной $BASH_VERSION, считается, что скрипт запущен не в Bash, и тогда будет выдано предупреждение и работа скрипта завершится.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования