この場合、/usr/bin/envに引数を渡すことができるのはなぜですか?

この場合、/usr/bin/envに引数を渡すことができるのはなぜですか?

私は読んだもう一つの答え私が提供したもの以外のパラメータをインタプリタに渡すことはできません/usr/bin/env

別の潜在的な問題は、この#!/usr/bin/envトリックを使用するとインタプリタに引数を渡すことができないことです(暗黙的に渡されたスクリプト名を除く)。

ただし、次の使用中にawkフラグを指定しないと壊れ、-fフラグを指定すると修正されるためできることがあります。-f/usr/bin/env

まず、フラグがありません-f

$ cat wrap_in_quotes
#!/usr/bin/env awk
# wrap each line in quotes
# usage: wrap_in_quotes [ file ... ]
{ print "\""$0"\"" }
$ echo foobar | ./wrap_in_quotes
awk: syntax error at source line 1
 context is
     >>> . <<< /wrap_in_quotes
awk: bailing out at source line 1

2.-f旗を運ぶ:

$ vim wrap_in_quotes
$ cat wrap_in_quotes
#!/usr/bin/env awk -f
# wrap each line in quotes
# usage: wrap_in_quotes [ file ... ]
{ print "\""$0"\"" }
$ echo foobar | ./wrap_in_quotes
"foobar"
  • もしそうなら、リンク回答通訳者にフラグを渡すことはできません。なぜそうすることができ-fますかawk

私は走っていますmacOS

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12.1
BuildVersion:   16B2657

ベストアンサー1

一部のUnices、特にmacOS(および2005年以前のFreeBSD)ではこれを許可しますが、Linuxでは許可しません。

最新バージョンのGNU coreutilsパッケージ(8.30+)でユーティリティを使用している場合は、その行に複数の引数を提供するためのenv非標準オプションがあります。-S#!

反対の質問:Linux で `#!/usr/bin/env コマンド --argument` を使用する Shebang ラインが失敗します。

おすすめ記事