Saya punya skrip sederhana:
#!/usr/bin/env ruby --verbose
# script.rb
puts "hi"
Di kotak OSX saya, itu berjalan dengan baik:
osx% ./script.rb
hi
Namun, pada kotak linux saya, ada kesalahan
linux% ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Jika saya menjalankan garis shebang secara manual, itu berfungsi dengan baik
linux% /usr/bin/env ruby --verbose ./script.rb
hi
Tapi saya bisa meniru kesalahan jika saya masukkan ruby --verbose
ke argumen tunggalenv
linux% /usr/bin/env "ruby --verbose" ./script.rb
/usr/bin/env: ruby --verbose: No such file or directory
Jadi saya pikir ini adalah masalah dengan bagaimana env
menafsirkan reset garis shebang. Saya menggunakan 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.
Ini sepertinya sangat aneh. Apakah ini masalah umum dengan versi ini env
, atau ada hal lain yang terjadi di sini yang tidak saya ketahui?
linux
scripting
executable
env
rampion
sumber
sumber
Jawaban:
Sepertinya ini karena Linux (tidak seperti BSD) hanya meneruskan satu argumen ke perintah shebang (dalam hal ini env).
Ini telah banyak dibahas di StackOverflow .
sumber
Menemukan ini melalui komentar @rampion:
Sumber: http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html
sumber