Фактическая команда, выполняемая при запуске сценария с именем shebang и теми же аргументами?

Вы почти у цели. Вы получите с ISO_Lv3_Shift+Shift+q — это четвертый уровень.

// ISO level   1  2    3         4       5    6    7    8
key <AD01> { [ q, Q, degree, paragraph, foo, bar, baz, bat ] };

Чтобы получить доступ ко всем этим символам, вам понадобится Shift и 3 модификатора:

  • мод не дает вам q; добавить Shift для Q
  • ISO_Lv3_Shift дает вам °; добавьте Shift для
  • ISO_Lv5_Shift дает вам foo; добавить Shift для бара
  • ISO_Lv3_Shift+ISO_Lv5_Shift дает вам баз; добавить Shift для bat

Я полагаю, что в некоторых контекстах вы можете увидеть комбинацию ISO_Lv3_Shift+ISO_Lv5_Shift, называемую ISO_Lv8_Shift или уровень8.

0
20.08.2017, 19:45
2 ответа

Аргументы для интерпретатора в этом случае представляют собой аргументы, построенные после интерпретации строки shebang, комбинируя строку shebang с именем скрипта и его командными -строковыми аргументами.

Таким образом, сценарий AWK, начинающийся с

#! /usr/bin/awk -f

назвали myscriptи назвали

./myscript file1 file2

приводит к фактическим аргументам

/usr/bin/awk -f./myscript file1 file2

В данном случае единственным необязательным аргументом является -f. Не всем интерпретаторам нужен один (, см. /bin/sh, например, ), и многие системы допускают не более одного (, поэтому ваша строка shebang не будет работать так, как вы ожидаете ). Однако аргумент может содержать пробелы; все содержимое строки shebang после того, как интерпретатор передается как один аргумент.

Чтобы поэкспериментировать со строками шебанга, вы можете использовать #! /bin/echo(, хотя это не помогает различать аргументы, когда есть пробелы ).

См. Как запускаются программы для более подробного объяснения того, как обрабатываются строки shebang (в Linux ).

6
28.01.2020, 02:13

Прочтите справочную страницу execve(2). Ограничение на один необязательный аргумент зависит от ОС.Linux рассматривает все слова после интерпретатора как один единственный аргумент

Если вы хотите сделать это:

#! /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2

Вы действительно должны это сделать

#!/bin/sh
exec /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2 "$@"
#...................................................................................... ^^^^

ОБНОВЛЕНИЕ :Я заметил, что программа envимеет опцию -Sтолько для этой цели :шебанг может быть (хотя, если бы мне пришлось поддерживать эту программу, я бы не был счастлив)

#!/usr/bin/env -S /path/to/interpreter --opt1 opt1-arg --opt2 opt2-arg --opt3 nonopt-arg1 nonopt-arg2

Прочтите справочную страницу env(1).

5
28.01.2020, 02:13

Теги

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