По умолчанию оболочка не влияет на выполнение сценариев (если только вы не используете оболочку, которая делает что-то очень странное).
Исполняемый скрипт без линии
#!
будет выполнен с
/bin/sh
.
На самом деле это не кажется правильным, но в любом случае вам не о чем беспокоиться.
Пока ваши скрипты начинаются с #!/bin/ksh
и вы выполняете их нормально, то система будет выполнять их, передавая их /bin/ksh
.
Одна вещь, которую вы может нужно беспокоиться о том, есть ли /bin/ksh
, и если да, то какой это. В моей системе (Linux Mint 17) /bin/ksh
символическая ссылка на /etc/alternatives/ksh
, которая, в свою очередь, символическая ссылка на /bin/ksh93
.
Сценарии с #!/bin/ksh
, вероятно, достаточно часто, что почти все UNIX-подобные системы будут обслуживать их и установит что-то, который ведет себя как KSH в этом месте.
Обратите внимание, что то, что вы называете «оболочкой по умолчанию», указанной в $SHELL
, не является общесистемным по умолчанию. Это просто значение конкретной переменной среды.Эта переменная установлена для каждого пользователя при входе в систему на основе оболочки, указанной в /etc/passwd
или ее эквиваленте; поэтому разные пользователи могут иметь разные оболочки по умолчанию. Вы можете изменить значение $SHELL
после входа в систему. Запись в /etc/passwd
или ее эквивалент устанавливается при создании учетной записи и может быть изменена позже. Большинство систем имеют стандартную пользовательскую оболочку, установленную для новых учетных записей, если не указана оболочка (например, большинство пользователей Linux-систем /bin/bash
).
Вы правы: линия shebang выполняется на любом вызове 'execve()'. Только если вы используете сценарии, вам нужно ухаживать за тем, от кого они вызваны. –
Или если указанный интерпретатор не существует или не является исполняемым или другой странностью. –