Mam prosty skrypt:
#!/usr/bin/env ruby --verbose
# script.rb
puts "hi"
W moim systemie OSX działa dobrze:
osx% ./script.rb
hi
Jednak w moim Linux-ie generuje błąd
linux% ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Jeśli uruchomię linię shebang ręcznie, działa dobrze
linux% /usr/bin/env ruby --verbose ./script.rb
hi
Ale mogę powtórzyć błąd, jeśli spakuję ruby --verbose
jeden argument doenv
linux% /usr/bin/env "ruby --verbose" ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Myślę więc, że jest to problem z env
interpretacją resetowania linii shebang. Używam 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.
To wydaje się naprawdę dziwne. Czy jest to częsty problem z tą wersją env
, czy może dzieje się tu coś jeszcze, czego nie wiem?
linux
scripting
executable
env
szaleństwo
źródło
źródło
Odpowiedzi:
Wygląda na to, że Linux (w przeciwieństwie do BSD) przekazuje tylko jeden argument do polecenia shebang (w tym przypadku env).
Zostało to szeroko omówione na StackOverflow .
źródło
Znalazłem to za pośrednictwem komentarza @rampion:
Źródło: http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html
źródło