4

Имея супер простой сценарий оболочки, например:

echo "Hello World"

без строки shebang, исполняемый бит установлен в файле и называется так:

./my_sript

какой интерпретатор используется для запуска скрипта? Как он определяется системой и где определяется интерпретатор по умолчанию?

2 ответа2

3

Будет использоваться оболочка по умолчанию для этого пользователя (не текущая оболочка). Посмотрите на /etc/passwd - он определен там и будет запущен при входе в систему. Вы можете использовать chsh чтобы изменить оболочку текущего пользователя по умолчанию.

1

Я не согласен с ответом JVB. Рассмотрим следующий сценарий в формате csh без шебанга:

#
set x = 'a'
if ($x == 'a') then
   echo "running csh"
endif

На моей машине, где моя оболочка по умолчанию (t)csh, результат:

anukis% ./shell-test
running csh

Теперь отредактируйте скрипт для удаления верхней строки:

set x = 'a'
if ($x == 'a') then
   echo "running csh"
endif

Теперь перезапустите его, и результат:

anukis% ./shell-test
./shell-test: 6: Syntax error: end of file unexpected (expecting "fi")

Какая разница? Древний способ отличить csh от (Bourne) sh: если первая строка начинается с восьмиугольника ("#"), предположим, что это скрипт C-shell, в противном случае - оболочка Bourne (-type).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .