GNU/Linux >> Linux の 問題 >  >> Linux

Linux で `#!/usr/bin/env command --argument` を含む Shebang 行が失敗する

これは、Linux (BSD とは異なり) が単一の引数のみを shebang コマンド (この場合は env) に渡すためのようです。

これは、StackOverflow で広く議論されています。


@rampion コメントでこれを見つけました:

<ブロック引用>

何が起こるかというと、カーネルは #! を探してファイルの最初の 2 文字を処理します。それらが見つかった場合、非スペース文字を探してすべてのスペース文字をスキップし、別のスクリプトではなく実際の実行可能ファイルである必要があるインタープリター パスを抽出しますが、Linux はそれを拡張して再帰的なスクリプト処理を許可します。次に、最初の非スペース文字にスキップし、そこから次の改行文字に移動し、それを単一の引数としてコマンドに渡します。引用符やその他のメタ文字の「シェル」処理はありません。それはすべて非常に単純で力ずくです。したがって、そこにオプションを追加することはできません。引数の空白が 1 つだけ含まれており、'perl -w' はカーネルがここで認識して渡すものです。

ソース:http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html


Linux
  1. / usr/binと/usr/ local / bin Linuxの場合?

  2. / bin/bashではなく/bin/ shを指すシバンを使用する理由はありますか?

  3. バイナリを /bin、/sbin、/usr/bin、および /usr/sbin にインストールし、 --prefix および DESTDIR と対話します

  1. ディレクトリの移動とファイルの実行を 1 つのコマンドで実行

  2. #!/usr/bin/env bash と #!/usr/bin/bash の違いは何ですか?

  3. cmake --version は /usr/bin/cmake を指し、どの cmake は /usr/local/bin を指しますか

  1. Linuxでの‘/ usr / bin / [‘[角かっこ]コマンドの使用法は何ですか?

  2. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  3. /bin と /usr/bin の違い