Tengo un script simple:
#!/usr/bin/env ruby --verbose
# script.rb
puts "hi"
En mi cuadro OSX, funciona bien:
osx% ./script.rb
hi
Sin embargo, en mi caja de Linux, arroja un error
linux% ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Si ejecuto la línea shebang manualmente, funciona bien
linux% /usr/bin/env ruby --verbose ./script.rb
hi
Pero puedo replicar el error si empaco ruby --verbose
en un solo argumento paraenv
linux% /usr/bin/env "ruby --verbose" ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Así que creo que este es un problema con la forma de env
interpretar el restablecimiento de la línea shebang. Estoy usando 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.
Esto parece realmente extraño. ¿Es un problema común con esta versión env
o hay algo más que no sé?
linux
scripting
executable
env
rampion
fuente
fuente
Respuestas:
Parece que esto se debe a que Linux (a diferencia de BSD) solo pasa un único argumento al comando shebang (en este caso env).
Esto ha sido ampliamente discutido en StackOverflow .
fuente
Encontré esto a través del comentario de @rampion:
Fuente: http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html
fuente