La ligne shebang n'a jamais été spécifiée dans POSIX, SUS, LSB ou toute autre spécification. Autant que je sache, il n'a même pas été correctement documentée.
Il s'agit d'un rough consensus sur ce qu'il fait: prendre tout ce qui est entre l' !
et de la \n
et exec
. L'hypothèse est que tout ce qui est entre l' !
et de la \n
est une intégrale de chemin d'accès absolu à l'interprète. Il n'y a pas de consensus sur ce qui se passe s'il contient des espaces.
- Certains systèmes d'exploitation simplement traiter l'ensemble de la chose que le chemin d'accès. Après tout, dans la plupart des systèmes d'exploitation, des espaces ou des tirets sont légales dans un chemin.
- Certains systèmes d'exploitation divisé en espaces et traiter la première partie que le chemin de l'interprète et le reste des arguments personnels.
- Certains systèmes d'exploitation divisé à la première espaces et traiter la partie avant que le chemin d'accès à l'interprète et le reste comme un seul argument (qui est ce que vous voyez).
- Certains même ne prennent pas en charge shebang lignes à tous.
Heureusement, 1. et 4. semblent avoir disparu, mais 3. est assez répandue, de sorte que vous ne peut tout simplement pas compter sur d'être en mesure de passer plus d'un argument.
Et puisque le lieu de commandes est pas spécifiée dans POSIX ou SUS, vous utilisez généralement que seul argument en passant le fichier exécutable du nom d' env
afin qu' il puisse déterminer l'emplacement de l'exécutable; par exemple:
#!/usr/bin/env gawk
[Évidemment, ce toujours suppose un chemin particulier pour env
, mais il n'existe que très peu de systèmes où il vit en /bin
, donc c'est généralement sans danger. L'emplacement de env
est beaucoup plus standardisée que l'emplacement de gawk
, ou pire encore, quelque chose comme python
ou ruby
ou spidermonkey
.]
Ce qui signifie que vous ne pouvez utiliser aucun des arguments à tous.