GNU/Linux >> Linux Esercitazione >  >> Linux

La riga Shebang con il comando "#!/usr/bin/env --argument" non riesce su Linux

Sembra che ciò sia dovuto al fatto che Linux (a differenza di BSD) passa solo un singolo argomento al comando shebang (in questo caso env).

Questo è stato ampiamente discusso su StackOverflow.


Ho trovato questo tramite il commento di @rampion:

Quello che succede è che il kernel processa i primi due caratteri del file cercando #!. Se vengono trovati, salta tutti i caratteri spaziali cercando un carattere non spaziale ed estrae il percorso dell'interprete che deve essere un vero eseguibile e non un altro script, sebbene Linux lo estenda per consentire l'elaborazione ricorsiva degli script. Dopo averlo scoperto, salta al primo carattere non spazio dove prende da lì il successivo carattere di nuova riga e lo passa come singolo argomento al comando. Non esiste un'elaborazione "shell" di virgolette o altri meta caratteri. È tutto molto semplice e forza bruta. Quindi non puoi essere fantasioso con le opzioni lì. Ottieni esattamente uno spazio bianco di argomento incluso e 'perl -w' è ciò che il kernel vede qui e trasmette.

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


Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Perché è meglio usare "#!/usr/bin/env Name" invece di "#!/path/to/name" come The Shebang?

  3. Installa i binari in /bin, /sbin, /usr/bin e /usr/sbin, interazioni con --prefix e DESTDIR

  4. Cambia directory ed esegui il file in un comando

  5. Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

Comando Diff in Linux con esempi

Comando Linux Cut con esempi pratici

Come controllare la versione del sistema operativo con la riga di comando di Linux

Linux – /sbin/init non esiste?

Il comando Uniq in Linux spiegato con esempi

Utilizzo del comando Linux sed con esempi