J'ai un script simple:
#!/usr/bin/env ruby --verbose
# script.rb
puts "hi"
Sur ma machine OSX, ça fonctionne bien:
osx% ./script.rb
hi
Cependant, sur ma machine Linux, cela jette une erreur
linux% ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Si je lance la ligne shebang manuellement, cela fonctionne bien
linux% /usr/bin/env ruby --verbose ./script.rb
hi
Mais je peux reproduire l'erreur si je compresse ruby --verbose
en un seul argumentenv
linux% /usr/bin/env "ruby --verbose" ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Donc, je pense que c'est un problème avec la façon dont env
on interprète la réinitialisation de la ligne shebang. J'utilise 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.
Cela semble vraiment étrange. Est-ce un problème courant avec cette version de env
ou y a-t-il autre chose que je ne connais pas qui se passe ici?
linux
scripting
executable
env
rampion
la source
la source
Réponses:
On dirait que c'est parce que Linux (contrairement à BSD) ne transmet qu'un seul argument à la commande shebang (dans ce cas, env).
Cela a été longuement discuté sur StackOverflow .
la source
J'ai trouvé ce commentaire via @rampion:
Source: http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html
la source