#!/bin/echo Run this script with: bash
if ! [ "$BASHOPTS" ]
then
echo Run this script as bash script.sh
exit 1
fi
... rest of script here ...
Это предотвращает (полезное) выполнение с помощью ./script.sh
, вызывает двоичный файл echo
вместо интерпретатора оболочки и печатает сообщение в первой строке, за которым следует имя сценария.
При запуске в оболочке, отличной от Bash, или в Bash в режиме POSIX (как в случае с sh
), переменная BASHOPTS
почти наверняка не будет установлена, а тело if
запустится, распечатает сообщение и завершится с ошибкой.
Это работает в версиях Bash 4-й серии при использовании как sh
; для более ранних версий возможно if ! [ "$BASH" ] || ! [ "${BASH##*/}" = "bash" ]
— ваш лучший выбор, который проверяет, заканчивается ли путь к интерпретатору /bash
.Если ваш sh
не Bash, достаточно просто проверить $BASH
.
Честно говоря, я думаю, что вы, скорее всего, решаете не ту задачу, но это сделает то, о чем вы просили.