Если первая строка скрипта начинается с #!
, называемого "shebang" , который указывает, как выполняется скрипт, если вы вызываете его как команду.Он дает полный путь к интерпретатору для вызова и, необязательно, аргумент для передачи интерпретатору вместе с именем скрипта.
Если у вас есть скрипт с именем foo
, первая строка которого
#!/bin/csh
, затем введите ./foo
эквивалентно /bin/csh foo
.(Файл foo
должен быть исполняемым; используйте chmod +x
, если его еще нет.)
Это полностью не зависит от (а) вашей оболочки входа в систему, (б), оболочки, в которой вы находитесьв настоящее время работает, и (c) оболочка, указанная в переменной среды $SHELL
.
Вы можете вызвать скрипт, явно введя имя оболочки, используемой для его запуска, ноВесь смысл #!
в том, что вам не нужно этого делать.
Возможно, что /bin/csh
не существует в вашей системе, или что это что-то отличное от C-shell.
tcsh
- обновленная версия csh
.Вы должны иметь возможность использовать его для выполнения любого сценария csh
.
Узнайте, где в вашей системе установлен csh
или tcsh
, и обновите путь в строке #!
, чтобы обратиться к нему.,Возможно, вам придется установить csh
или tcsh
самостоятельно - но вы сказали, что набрали csh
, и это сработало, так что в этом нет необходимости.
Из оболочки bash введите команду type csh
скажет вам, где установлен csh
.
Кстати, строка #!
для скрипта csh или tcsh должна включать параметр -f
:
#!/bin/csh -f
Это говоритоболочка не для запуска сценария запуска пользователя ($HOME/.cshrc
) при запуске сценария.Это экономит время и обеспечивает переносимость сценария, не зависящего от среды одного пользователя.(Это не применимо к скриптам sh или bash; sh и bash имеют опцию -f
, но это имеет совершенно другое значение.)
Я попытался набрать csh
в Терминал для переключения оболочек, но команда echo $SHELL
просто говорит мне, что я все еще в bash.
Вызов оболочки не меняет значение вашей переменной среды $SHELL
.Обычно это путь к вашей оболочке входа в систему по умолчанию (но его можно изменить).
Вы можете определить, используете ли вы tcsh
, набрав echo $tcsh
или echo $version
.(у csh нет этих переменных).Вы можете узнать, если вы используете bash
, набрав echo $BASH_VERSION
.