Ich habe ein einfaches Skript:
#!/usr/bin/env ruby --verbose
# script.rb
puts "hi"
Auf meiner OSX-Box läuft es einwandfrei:
osx% ./script.rb
hi
Auf meiner Linux-Box wird jedoch ein Fehler ausgegeben
linux% ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Wenn ich die Shebang-Linie manuell starte, funktioniert es einwandfrei
linux% /usr/bin/env ruby --verbose ./script.rb
hi
Aber ich kann den Fehler replizieren, wenn ich ihn ruby --verbose
in ein einziges Argument packeenv
linux% /usr/bin/env "ruby --verbose" ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Ich denke, dies ist ein Problem bei der env
Interpretation des Zurücksetzens der Shebang-Linie. Ich benutze 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.
Das scheint wirklich seltsam. Ist dies ein häufiges Problem mit dieser Version von env
, oder ist hier noch etwas los, das ich nicht kenne?
linux
scripting
executable
env
Rampion
quelle
quelle
Antworten:
Es sieht so aus, als ob Linux (im Gegensatz zu BSD) nur ein einziges Argument an den Befehl shebang übergibt (in diesem Fall env).
Dies wurde ausführlich in StackOverflow erörtert .
quelle
Gefunden über @rampion Kommentar:
Quelle: http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html
quelle