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 --verboseen 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 envinterpretar 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 envo 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