GNU/Linux >> Tutoriels Linux >  >> Linux

La ligne Shebang avec `#!/usr/bin/env command --argument` échoue sous Linux

Il semble que cela soit dû au fait que Linux (contrairement à BSD) ne transmet qu'un seul argument à la commande shebang (dans ce cas, env).

Cela a été longuement discuté sur StackOverflow.


Trouvé via le commentaire de @rampion :

Ce qui se passe, c'est que le noyau traite les deux premiers caractères du fichier à la recherche de #!. Si ceux-ci sont trouvés, il ignore tous les caractères d'espacement à la recherche d'un caractère non-espace et extrait le chemin de l'interpréteur qui doit être un véritable exécutable et non un autre script, bien que Linux étende cela pour permettre le traitement de script récursif. Après avoir trouvé cela, il passe au premier caractère non-espace où il passe au caractère de nouvelle ligne suivant et le transmet comme un seul argument à la commande. Il n'y a pas de traitement "shell" des guillemets ou d'autres métacaractères. C'est très simple et c'est la force brute. Par conséquent, vous ne pouvez pas être fantaisiste avec les options là-bas. Vous obtenez exactement un espace blanc d'argument inclus et 'perl -w' est ce que le noyau voit ici et transmet.

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


Linux
  1. À quoi sert la commande ‘/usr/bin/[‘ [Square Bracket] sous Linux ?

  2. Pourquoi est-il préférable d'utiliser "#!/usr/bin/env Name" au lieu de "#!/path/to/name" comme Shebang ?

  3. /usr/bin Vs /usr/local/bin Sous Linux ?

  4. Changer de répertoire et exécuter le fichier en une seule commande

  5. Quelle est la différence entre #!/usr/bin/env bash et #!/usr/bin/bash ?

Commande Diff sous Linux avec exemples

Commande Linux Cut avec des exemples pratiques

Comment vérifier la version du système d'exploitation avec la ligne de commande Linux

Linux – /sbin/init n'existe pas ?

La commande Uniq sous Linux expliquée avec des exemples

Utilisation de la commande Linux sed avec des exemples