Почему я могу передавать аргументы в / usr / bin / env в этом случае?

Согласно Webupd8 вы необходимо отредактировать файл конфигурации /etc/pm/config.d/unload_modules , добавив следующую строку:

SUSPEND_MODULES="$SUSPEND_MODULES "

В вашем случае используется модуль ядра iwlwifi :

SUSPEND_MODULES="$SUSPEND_MODULES iwlwifi"

затем отредактируйте свой 10_resume_wifi , как в следующем примере:

#!/bin/sh

case "${1}" in
  resume|thaw)
    nmcli r wifi off && nmcli r wifi on;
esac

3
28.04.2017, 01:51
2 ответа

Некоторые Unices, в первую очередь macOS (и до 2005 года FreeBSD), допускают это, а Linux — нет.

Противоположный вопрос: Строка Shebang с `#!/usr/bin/env command --argument` не работает в Linux

10
27.01.2020, 21:12

Вы не можете переносимо передать интерпретатору несколько аргументов. В частности, Linux не поддерживает его.

Некоторые варианты Unix поддерживают более одного аргумента в строке shebang. Это относится к современным системам FreeBSD, OSX/macOS и некоторым другим. См. страницу Sven Mascheck о переносимости оболочки для сравнительной таблицы вариантов Unix и большого количества исторической информации.


Если вы хотите иметь переносимый awk-скрипт, то простого решения не существует. #!/usr/bin/env и #!/bin/sh — единственные строки shebang, которые переносимы на практике: в зависимости от варианта Unix, awk может находиться в /bin или /usr/bin или в некоторых других местах (например, /usr/xpg4/bin/awk в Solaris, чтобы получить POSIX — тот, что в /usr/bin для устаревших приложений). Поскольку #!/usr/bin/env awk -f не работает переносимо, остается #!/bin/sh. (/bin/sh может быть устаревшей оболочкой Bourne, а не современной оболочкой POSIX, но на практике любая платформа Unix что-то там имеет.) Идея состоит в том, чтобы написать polyglot, т.е. сценарий, который sh интерпретирует как инструкции по запуску awk и который awk интерпретирует как желаемый сценарий.Это работает даже в системах, которые не распознают строки shebang, но по умолчанию используют sh для выполнения скрипта (некоторые старые unices или некоторые unix-подобные пользовательские области на ядрах, отличных от Unix).

#!/bin/sh
"exec" "awk" "-f" "$0" "$@" && 0 {}
… # awk script here

(Если вас беспокоит возможность переноса на старые unices, см. страницу Sven Mascheck о поддержке "$@" и рассмотрите возможность использования ${1+"$@"} вместо этого.)

2
27.01.2020, 21:12

Теги

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