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

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

簡単なスクリプトがあります。

#!/usr/bin/env ruby --verbose
# script.rb
puts "hi"

私のOSXコンピュータではうまくいきます。

osx% ./script.rb
hi

しかし、私のLinuxコンピュータではエラーが発生します。

linux% ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory

Shebangラインを手動で実行すると正常に動作します。

linux% /usr/bin/env ruby --verbose ./script.rb
hi

ruby --verboseただし、これを単一のパラメータに圧縮すると、エラーを複製できます。env

linux% /usr/bin/env "ruby --verbose" ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory

envしたがって、Shebang Line Resetの問題をこのように説明しているようです。私はGNU coreutils 8.4を使用していますenv

linux% /usr/bin/env --version
env (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard Mlynarik and David MacKenzie.

本当に変に見えますね。これがこのバージョンの一般的な問題ですかenv、それとも私が認識していない他の問題はありますか?

ベストアンサー1

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

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

おすすめ記事