сценарии оболочки все еще работают без #! (sha-ударьте по строке),

Сакура несомненно не на основе xterm. Это - на самом деле еще один терминал VTE. Источник утверждает, что-e опция совместима, но ясно не (xterm, использует оболочку, с одной стороны. Кроме того, это, кажется, не делает "все аргументы" ерунда, что источник сакуры утверждает, что это делает и эмулирует с его-e опцией).

От рассмотрения источника для того, как это имеет дело с параметрами командной строки, попробуйте это:

sakura -x 'sh -c "cd ~; exec /bin/bash"'
10
10.10.2012, 07:48
3 ответа

Если волшебная строка не обеспечивается, оболочка по умолчанию используется для запущения скрипта. Этой оболочкой по умолчанию могла или быть Оболочка Bourne (sh), который имеет место в некоторых разновидностях, однако, в некоторых других разновидностях, используемая оболочка по умолчанию является тем же как оболочка входа в систему для выполнения ее. Вещь: не предоставляйте системе право решать оболочку, всегда обеспечивать оболочку, которую Вы хотите в первой строке.

3
27.01.2020, 20:03
  • 1
    да.. может быть моя текущая оболочка, вызывает оболочку по умолчанию для сценария оболочки, не имеющего магические числа. –  user1678213 10.10.2012, 09:55
  • 2
    @user1678213 Да, это - Ваша оболочка (а не ядро) это делает это. –  Gilles 'SO- stop being evil' 11.10.2012, 03:26
  • 3
    я полагаю мандатам POSIX, что/bin/sh используется в этом случае. –  vonbrand 30.01.2013, 22:33
  • 4
    @vonbrand Это - распространенное заблуждение. POSIX не передает под мандат оболочку POSIX, чтобы быть /bin/sh, только быть первым sh исполняемый файл нашел при исследовании соответствующего ПУТИ. –  jlliagre 24.07.2013, 03:03
  • 5
    Это неправильно, это никогда не "оболочка входа в систему", которая используется для выполнения его. Что может произойти, хотя то, что оболочка вызова (если сценарий называют от оболочки) может иметь ребенка себя интерпретирующий его. –  Stéphane Chazelas 24.07.2013, 05:08

Это - вероятно, одна из следующих 3 возможностей:

  1. Вы называете сценарий непосредственно с интерпретатором, IE: удар script.sh

  2. Название файла сценария имеет .sh расширение, которое заставляет систему искать программу по умолчанию для этого типа файла

  3. Среда оболочки, которую Вы используете, выполняет 'эхо' отдельно, так как я могу только предположить, что файл сценария является исполняемым файлом. Например, при использовании оболочки удара и иметь команду в файле, который используется только ksh, то Вы будете видеть, что это не будет работать.

Удачи!

-2
27.01.2020, 20:03
  • 1
    и при этом я не называл его с ударом, ни ни с каким расширением. –  user1678213 10.10.2012, 09:19
  • 2
    и среда оболочки не выполняют его потому что, когда я вызываю команду PS после вызова моего сценария. команда PS показывает два, колотят средства process.which, что существует два выполнения удара. каждый - моя оболочка удара входа в систему, и другой является ударом для моего basic_script –  user1678213 10.10.2012, 09:26
  • 3
    2: ядро не сделает ничего как этот. Zsh может сделать это, и удар может быть скручен в выполнение его. 3: Да, но это варьируется немного между оболочками, см. мой ответ. –  Gilles 'SO- stop being evil' 11.10.2012, 03:27

Когда Вы выполняете программу, проверки ядра, запускается ли она некоторой волшебной последовательностью байта. Если исполняемый файл запускается с #!, ядро интерпретирует остальную часть строки как название интерпретатора. Если исполняемый файл запускается с \177ELF (где \177 байт 127), он загружает файл как исполняемый файл ELF; это - нормальный вид в большинстве систем Unix в наше время.

Если ядро не распознает формат файла, оно отказывается выполнять файл и возвращает ошибку ENOEXEC (Исполнительная ошибка формата). Когда оболочка замечает, что, берет себя для выполнения программы как сценария оболочки.

Для наблюдения этого в действии добавьте несколько команд к сценарию:

ps l $$
ls -l /proc/$$/exe
echo hello

(Это для Linux, корректируйтесь для других нельдов.) Затем пытаются запустить тот скрипт от различных оболочек. Вы будете видеть, что некоторые оболочки порождают новые экземпляры себя для выполнения сценария (удар, ksh93), в то время как другие мечут икру /bin/sh (тире, pdksh, zsh).

8
27.01.2020, 20:03
  • 1
    Что я ищу с Вашим ls -l команда? Это: lrwxrwxrwx 1 i 0 Oct 11 05:15 exe -> /bin/bash -? Если так, что это говорит? Кроме того, заметил, что я имею SHELL=/bin/bash на env, но изменение это, казалось, не изменило поведение. Возможно, это не связано? –  Emanuel Berg 11.10.2012, 06:21
  • 2
    , это походит на Вас, заменяет переменную оболочки "SHELL" .if да, затем Вы - только chnging значение переменной оболочки привычка SHELL.it chnge Ваш shell.for chnaging Ваше редактирование оболочки/etc/passwd файл. –  user1678213 11.10.2012, 08:31
  • 3
    @EmanuelBerg Да (я должен был записать ls -l /proc/$$/exe, на самом деле). exe ссылки указывают на оболочку, это выполняет Ваш сценарий. Когда Вы запустите свой скрипт, Вы будете видеть, что это - удар, который интерпретирует сценарий. При выполнении его от, например, pdksh это работает /bin/sh. Я не знаю ни о какой оболочке, которая использует SHELL переменная среды или вход в систему окружают при том обстоятельстве. –  Gilles 'SO- stop being evil' 11.10.2012, 12:37
  • 4
    @user1678213, Изменяющий оболочку в /etc/passwd изменения, какая оболочка выполняется, когда Вы входите в систему по SSH или на текстовой консоли. Это не изменяется, какая оболочка могла бы выполнить сценарии. –  Gilles 'SO- stop being evil' 11.10.2012, 12:38
  • 5
    @user1678213 я проверил то, что я записал здесь путем запущения тестов. Ни одна из оболочек, которые я протестировал, не заглянула /etc/passwd решить, какую оболочку использовать, они или разветвили экземпляр себя или выполнили /bin/sh. –  Gilles 'SO- stop being evil' 11.10.2012, 15:22

Теги

Похожие вопросы