Múltiples shebangs en un solo archivo bash

8

Tengo un script de otra persona que tiene un aspecto (nota: es un solo archivo):

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

Me pregunto cuál es el propósito del segundo y tercer shebangs. ¿Es por error o a propósito?

Barat Sahdzijeu
fuente
¿Los extraños son #!/bin/bashprecedidos por <<constructo (aquí documento) como some command <<end_of_script_flag:?
dan
No hay <<construcciones. Solo shebangs simples y algunos comandos de eliminación (este fue un script de desinstalación)
Barat Sahdzijeu
Podría ser que el guión se ensambló a partir de guiones destinados a ejecutarse sucesivamente, o que el archivo se dividió en varios guiones independientes, pero la división falló. ¿Qué es justo antes de las #!líneas extra ?
Gilles 'SO- deja de ser malvado'
@Gilles, creo que no hay propósitos ocultos adicionales de ese script. Es un script estático llamado Uninstall.command(plataforma: Mac OS X).
Barat Sahdzijeu

Respuestas:

9

Si estas líneas no son el comienzo de los scripts de shell incluidos que se construirán, es decir, dentro de un esquema de la forma:

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

A continuación, la construcción repetida que has encontrado es el resultado de muchos copy- pastede shell scripts completos pero sin suficiente cuidado y conocimiento de lo que es el uso de estos comentarios muy especial en la línea 1 de guiones, comenzando con #!.

Tenga cuidado antes de usar un script de shell (no sudo, no su:)).

dan
fuente
Por cierto, un montón de sudo está allí ... Jeezzz ...
Barat Sahdzijeu
/bin/rm(+ cosas ficticias para alimentar al robot)!
dan
3
... o combinando múltiples secuencias de comandos bash similares a la forma en que se ejecutaría si las sourceagrega por nombre. Sin embargo, no veo la necesidad del cerebro de comentarios. Es perfectamente admisible de esta manera y es la razón por la cual el shebang es una línea de comentarios.
0xC0000022L
Después de un segundo vistazo, noté que se repetían algunas otras líneas, así que tiendo a pensar que es solo copiar y pegar descuidadamente desde múltiples scripts.
Barat Sahdzijeu
4

Sin propósito, estos son solo comentarios. A menos que 'algunos comandos' contengan algunos comandos que guarden esto en un archivo separado para su posterior ejecución.

gena2x
fuente
No hay operaciones de escritura y ejecuciones posteriores. Este script es solo un conjunto de rmoperaciones que desinstalan alguna aplicación. Pensé que podría estar relacionado con bifurcar un nuevo shell, pero aparentemente fue sucio copiar y pegar por el creador del script.
Barat Sahdzijeu
@BaratSahdzijeu ¡TEN CUIDADO CON LAS ESCRITURAS ALEATORIAS CON Rm EN EL LUGAR! Disculpas por los límites, pero no puedo enfatizar lo importante que es eso. Si el autor original cometió los errores correctos (o más bien, los errores incorrectos), puede dañar otro software en la máquina e incluso romper el sistema operativo.
Nzall
Nate, gracias! En realidad no ejecuté ese script de shell. Lo utilicé como fuente de aprendizaje para el desinstalador en la plataforma Mac OS X (Linux like OS). Pensé que tal vez tiene un sabor especial de bash que tiene algún significado es shebang repetido dentro de un guión.
Barat Sahdzijeu 01 de
El #!mismo uso a nivel del núcleo (ver man execve) en cualquier sistema Unix (OpenBSD, FreeBSD, MacOS X, Kali-linux ...). El bashsimplemente ve esto como un comentario.
dan
@NateKerkhofs ¿Y qué hay mv ln cp dd vi ...junto con otros 200 comandos? ¿Por qué no los estresas también? Pueden sentirse excluidos.
ott--