Если я вас правильно понял, то вы хотите извлечь оболочку из первой строки скрипта.
Когда вы используете $SHELL
вы показываете оболочку, которую вы на самом деле используете, которая не должна совпадать с той, которая указана в первой строке: например, вы можете использовать use .
Команда /source
для запуска любого скрипта в любой запущенной оболочке.
Ниже будет показана оболочка из первой строки:
sed -n '1 s/^#!//p' "$0"
Здесь $0
- это запущенный скрипт, а команда sed
выводит первую строку с начальным #!
удален. Если такой строки нет, то ничего не будет возвращено, и вы можете проверить это.
Вы можете использовать $(...)
чтобы получить значение из команды sed
, например:-
echo Script "$0" is running with "$SHELL"
echo It should run with "$(sed -n '1 s/^#!//p' "$0")"