Сакура несомненно не на основе xterm. Это - на самом деле еще один терминал VTE. Источник утверждает, что-e опция совместима, но ясно не (xterm, использует оболочку, с одной стороны. Кроме того, это, кажется, не делает "все аргументы" ерунда, что источник сакуры утверждает, что это делает и эмулирует с его-e опцией).
От рассмотрения источника для того, как это имеет дело с параметрами командной строки, попробуйте это:
sakura -x 'sh -c "cd ~; exec /bin/bash"'
Если волшебная строка не обеспечивается, оболочка по умолчанию используется для запущения скрипта. Этой оболочкой по умолчанию могла или быть Оболочка Bourne (sh), который имеет место в некоторых разновидностях, однако, в некоторых других разновидностях, используемая оболочка по умолчанию является тем же как оболочка входа в систему для выполнения ее. Вещь: не предоставляйте системе право решать оболочку, всегда обеспечивать оболочку, которую Вы хотите в первой строке.
Это - вероятно, одна из следующих 3 возможностей:
Вы называете сценарий непосредственно с интерпретатором, IE: удар script.sh
Название файла сценария имеет .sh расширение, которое заставляет систему искать программу по умолчанию для этого типа файла
Среда оболочки, которую Вы используете, выполняет 'эхо' отдельно, так как я могу только предположить, что файл сценария является исполняемым файлом. Например, при использовании оболочки удара и иметь команду в файле, который используется только ksh, то Вы будете видеть, что это не будет работать.
Удачи!
Когда Вы выполняете программу, проверки ядра, запускается ли она некоторой волшебной последовательностью байта. Если исполняемый файл запускается с #!
, ядро интерпретирует остальную часть строки как название интерпретатора. Если исполняемый файл запускается с \177ELF
(где \177
байт 127), он загружает файл как исполняемый файл ELF; это - нормальный вид в большинстве систем Unix в наше время.
Если ядро не распознает формат файла, оно отказывается выполнять файл и возвращает ошибку ENOEXEC (Исполнительная ошибка формата). Когда оболочка замечает, что, берет себя для выполнения программы как сценария оболочки.
Для наблюдения этого в действии добавьте несколько команд к сценарию:
ps l $$
ls -l /proc/$$/exe
echo hello
(Это для Linux, корректируйтесь для других нельдов.) Затем пытаются запустить тот скрипт от различных оболочек. Вы будете видеть, что некоторые оболочки порождают новые экземпляры себя для выполнения сценария (удар, ksh93), в то время как другие мечут икру /bin/sh
(тире, pdksh, zsh).
ls -l
команда? Это: lrwxrwxrwx 1 i 0 Oct 11 05:15 exe -> /bin/bash
-? Если так, что это говорит? Кроме того, заметил, что я имею SHELL=/bin/bash
на env
, но изменение это, казалось, не изменило поведение. Возможно, это не связано?
– Emanuel Berg
11.10.2012, 06:21
ls -l /proc/$$/exe
, на самом деле). exe
ссылки указывают на оболочку, это выполняет Ваш сценарий. Когда Вы запустите свой скрипт, Вы будете видеть, что это - удар, который интерпретирует сценарий. При выполнении его от, например, pdksh это работает /bin/sh
. Я не знаю ни о какой оболочке, которая использует SHELL
переменная среды или вход в систему окружают при том обстоятельстве.
– Gilles 'SO- stop being evil'
11.10.2012, 12:37
/etc/passwd
изменения, какая оболочка выполняется, когда Вы входите в систему по SSH или на текстовой консоли. Это не изменяется, какая оболочка могла бы выполнить сценарии.
– Gilles 'SO- stop being evil'
11.10.2012, 12:38
/etc/passwd
решить, какую оболочку использовать, они или разветвили экземпляр себя или выполнили /bin/sh
.
– Gilles 'SO- stop being evil'
11.10.2012, 15:22
/bin/sh
, только быть первымsh
исполняемый файл нашел при исследовании соответствующего ПУТИ. – jlliagre 24.07.2013, 03:03