Eu tenho um script simples:
#!/usr/bin/env ruby --verbose
# script.rb
puts "hi"
Na minha caixa OSX, ele funciona bem:
osx% ./script.rb
hi
No entanto, na minha caixa linux, gera um erro
linux% ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Se eu executar a linha shebang manualmente, funcionará bem
linux% /usr/bin/env ruby --verbose ./script.rb
hi
Mas eu posso replicar o erro se eu agrupar ruby --verbose
em um único argumento paraenv
linux% /usr/bin/env "ruby --verbose" ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Então, acho que esse é um problema de como env
está interpretando a redefinição da linha shebang. Estou usando o 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.
Isso parece realmente estranho. Esse é um problema comum com esta versão env
ou há algo mais acontecendo aqui que eu não conheço?
linux
scripting
executable
env
rampion
fonte
fonte
Respostas:
Parece que isso ocorre porque o Linux (ao contrário do BSD) passa apenas um único argumento para o comando shebang (neste caso, env).
Isso foi discutido extensivamente no StackOverflow .
fonte
Encontrei este comentário via @rampion:
Fonte: http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html
fonte