GNU/Linux >> Znalost Linux >  >> Linux

Řádek Shebang s příkazem `#!/usr/bin/env --argument` v Linuxu selže

Vypadá to, že je to proto, že Linux (na rozdíl od BSD) předává příkazu shebang (v tomto případě env) pouze jeden argument.

Toto bylo rozsáhle diskutováno na StackOverflow.


Nalezeno přes komentář @rampion:

Co se stane, je, že jádro zpracuje první dva znaky souboru, který hledá #!. Pokud jsou nalezeny, přeskočí všechny mezerové znaky hledající znak bez mezery a extrahuje cestu interpreta, která musí být skutečným spustitelným souborem a ne jiným skriptem, ačkoli to linux rozšiřuje, aby umožnil rekurzivní zpracování skriptů. Poté, co zjistil, že pak přeskočí na první znak bez mezery, odkud přejde na další znak nového řádku a předá jej jako jediný argument příkazu. Neexistuje žádné „skořápkové“ zpracování uvozovek nebo jiných metaznaků. Všechno je to velmi jednoduché a hrubá síla. Tudíž si tam s volbami nemůžete přijít na chuť. Získáte přesně jeden prázdný znak včetně prázdného místa a 'perl -w' je to, co zde jádro vidí a předává dál.

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


Linux
  1. Jaké je použití příkazu „/usr/bin/[“ [hraná závorka] v Linuxu?

  2. /usr/bin Vs /usr/local/bin Na Linuxu?

  3. Není důvod mít Shebang ukazující na /bin/sh spíše než /bin/bash?

  1. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?

  2. Nainstalujte binární soubory do /bin, /sbin, /usr/bin a /usr/sbin, interakce s --prefix a DESTDIR

  3. cmake --version ukazuje na /usr/bin/cmake, zatímco který cmake ukazuje na /usr/local/bin

  1. Změňte adresář a spusťte soubor jedním příkazem

  2. Jaký je rozdíl mezi #!/usr/bin/env bash a #!/usr/bin/bash?

  3. Jaké jsou významy /usr/sbin, /usr/local/sbin a /usr/local/bin?