GNU/Linux >> Belajar Linux >  >> Linux

Baris Shebang dengan perintah `#!/usr/bin/env --argument` gagal di Linux

Sepertinya ini karena Linux (tidak seperti BSD) hanya meneruskan satu argumen ke perintah shebang (dalam hal ini env).

Ini telah dibahas secara luas di StackOverflow.


Menemukan ini melalui komentar @rampion:

Apa yang terjadi adalah kernel memproses dua karakter pertama dari file yang mencari #!. Jika itu ditemukan maka ia melewatkan semua karakter spasi yang mencari karakter non-spasi dan mengekstrak jalur juru bahasa yang harus dapat dieksekusi nyata dan bukan skrip lain, meskipun linux memperluasnya untuk memungkinkan pemrosesan skrip rekursif. Setelah menemukan itu kemudian melompat ke karakter non-spasi pertama di mana ia mengambil dari sana ke karakter baris baru berikutnya dan meneruskannya sebagai argumen tunggal ke perintah. Tidak ada pemrosesan kutipan 'shell' atau karakter meta lainnya. Itu semua sangat sederhana dan kasar. Oleh karena itu, Anda tidak dapat menyukai opsi di sana. Anda hanya mendapatkan satu argumen spasi putih yang disertakan dan 'perl -w' adalah apa yang dilihat dan diteruskan oleh kernel di sini.

Sumber:http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html


Linux
  1. /usr/bin Vs /usr/local/bin Di Linux?

  2. Ny Alasan Untuk Memiliki Shebang Menunjuk /bin/sh Daripada /bin/bash?

  3. cmake --version menunjuk ke /usr/bin/cmake sementara cmake menunjuk ke /usr/local/bin

  1. Apa gunanya Perintah ‘/usr/bin/[‘ [Square Bracket] di Linux?

  2. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  3. Memindahkan /bin konten ke /usr/bin, mungkin untuk membatalkan?

  1. Mengapa Lebih Baik Menggunakan "#!/usr/bin/env Name" Daripada "#!/path/to/name" Sebagai Shebang?

  2. Linux – Menggabungkan /usr/bin Dan /usr/sbin Ke /bin (gnu/linux)?

  3. Instal binari ke /bin, /sbin, /usr/bin dan /usr/sbin, interaksi dengan --prefix dan DESTDIR