Plusieurs shebangs dans un seul fichier bash

8

J'ai un script d'une autre personne qui a un look (note: c'est un seul fichier):

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

Je me demande quel est le but des deuxième et troisième shebangs? Est-ce par erreur ou volontairement?

Barat Sahdzijeu
la source
Les éléments étrangers sont-ils #!/bin/bashprécédés d'une <<construction (ici le document) comme some command <<end_of_script_flag:?
dan
Aucune <<construction. Shebangs simples et quelques commandes de suppression (c'était un script de désinstallation)
Barat Sahdzijeu
Il se peut que le script soit assemblé à partir de scripts destinés à être exécutés successivement, ou que le fichier soit destiné à être divisé en plusieurs scripts indépendants mais le fractionnement a échoué. Qu'est-ce qui se trouve juste avant les #!lignes supplémentaires ?
Gilles 'SO- arrête d'être méchant'
@ Gilles, je ne crois pas à des fins cachées supplémentaires de ce script. C'est un script statique nommé Uninstall.command(plateforme: Mac OS X).
Barat Sahdzijeu

Réponses:

9

Si ces lignes ne sont pas le début des scripts shell inclus à construire, c'est-à-dire à l'intérieur d'un schéma de la forme:

cat <<end_of_shell_script >dynamically_built_shell
#!/bin/bash
[...]
end_of_shell_script

Ensuite, la construction répétée que vous avez trouvée est le résultat de nombreux copy- pastede scripts shell complets, mais sans suffisamment de soin et de compréhension de l'utilisation de ces commentaires très spéciaux sur la ligne 1 des scripts, en commençant par #!.

Soyez prudent avant d'utiliser un tel script shell (non sudo, non su:)).

dan
la source
BTW, beaucoup de sudo sont là ... Jeezzz ...
Barat Sahdzijeu
/bin/rm(+ trucs factices pour nourrir le robot)!
dan
3
... ou en combinant plusieurs scripts bash similaires à la façon dont il serait exécuté si vous les sourcenommiez par leur nom. Cependant, je ne vois pas la nécessité de faire un commentaire sur le cerveau. C'est parfaitement admissible de cette façon et c'est la raison même pour laquelle le shebang est une ligne de commentaire.
0xC0000022L
Après un deuxième regard, j'ai remarqué que d'autres lignes étaient répétées, donc j'ai tendance à penser que c'est juste un copier-coller imprudent de plusieurs scripts.
Barat Sahdzijeu
4

Inutile, ce ne sont que des commentaires. Sauf si «certaines commandes» contiennent des commandes qui l'enregistrent dans un fichier séparé pour une exécution ultérieure.

gena2x
la source
Aucune opération d'écriture et aucune exécution ultérieure. Ce script n'est qu'un ensemble d' rmopérations qui désinstallent certaines applications. Je pensais que cela pourrait être lié à la création d'un nouveau shell, mais apparemment, c'était un copier-coller sale par le créateur du script.
Barat Sahdzijeu
@BaratSahdzijeu ATTENTION AUX SCRIPTS ALÉATOIRES AVEC rm LÀ! Toutes mes excuses pour les plafonds, mais je ne peux pas souligner à quel point c'est important. Si l'auteur d'origine a fait les bonnes erreurs (ou plutôt les mauvaises erreurs), cela peut endommager d'autres logiciels sur la machine et même casser le système d'exploitation.
Nzall
Nate, merci! En fait, je n'ai pas exécuté ce script shell. Je l'ai utilisé comme source d'apprentissage pour le programme de désinstallation sur la plate-forme Mac OS X (Linux comme OS). Je pensais que cela avait peut-être une saveur particulière de bash qui avait une signification.
Barat Sahdzijeu
La #!même utilisation au niveau du noyau (voir man execve) sur tout système Unix (OpenBSD, FreeBSD, MacOS X, Kali-linux…). Le bashconsidère simplement cela comme un commentaire.
dan
@NateKerkhofs Et qu'est-ce qui se passe mv ln cp dd vi ...avec 200 autres commandes? Pourquoi ne les stressez-vous pas aussi? Ils pourraient se sentir exclus.
ott--