Vários shebangs em um único arquivo bash


8

Eu tenho um script de outra pessoa que tem uma aparência (nota: é um único arquivo):

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

Gostaria de saber qual é o propósito da segunda e terceira travestis? É por engano ou de propósito?


Os estranhos #!/bin/bashprecedidos pelo <<construto (aqui documento) são some command <<end_of_script_flag:?
dan

Nenhuma <<construção. Apenas 'shebangs simples e alguns comandos Remover (este era script de desinstalação)
Barat Sahdzijeu

Pode ser que o script tenha sido montado a partir de scripts destinados a serem executados sucessivamente ou que o arquivo seja dividido em vários scripts independentes, mas a divisão falhou. O que é um pouco antes das #!linhas extras ?
Gilles 'SO- stop be evil' em

@ Gilles, acredito que não há propósitos ocultos extras desse script. É um script estático chamado Uninstall.command(plataforma: Mac OS X).
Barat Sahdzijeu

Respostas:


9

Se essas linhas não forem o começo dos scripts de shell incluídos a serem construídos, ou seja, dentro de um esquema do formulário:

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

Em seguida, a construção repetida que você encontrou é o resultado de muitos copy- pastede shell scripts completos, mas sem cuidado e compreensão do que é o uso destes comentário muito especial na linha 1 de scripts do suficiente, começando com #!.

Tenha cuidado antes de usar um script de shell (não sudo, não su:)).


BTW, muito sudo está lá ... Caramba ...
Barat Sahdzijeu

/bin/rm(+ coisas fictícias para alimentar o robô)!
dan

3
... ou combinando vários scripts bash semelhantes à forma como eles seriam executados se você os sourcedefinisse pelo nome. Mas não vejo a necessidade de comentar o cérebro. É perfeitamente admissível dessa maneira e é exatamente a razão pela qual o shebang é uma linha de comentário.
0xC0000022L

Depois de uma segunda olhada, reparei em outras linhas repetidas, então acho que é apenas copiar e colar descuidada de vários scripts.
Barat Sahdzijeu

4

Sem propósito, estes são apenas comentários. A menos que 'alguns comandos' contenha alguns comandos que salvam isso em um arquivo separado para execução posterior.


Nenhuma operação de gravação e execuções subseqüentes. Este script é apenas um conjunto de rmoperações que desinstalam alguns aplicativos. Eu pensei que poderia estar relacionado à bifurcação de novo shell, mas aparentemente era uma pasta de cópia suja pelo criador do script.
Barat Sahdzijeu

@BaratSahdzijeu TENHA CUIDADO COM OS SCRIPTS ALEATÓRIOS COM A Rm LÁ! Desculpas pelos limites, mas não posso enfatizar o quanto isso é importante. Se o autor original cometer os erros corretos (ou melhor, os erros errados), poderá danificar outros softwares na máquina e até interromper o sistema operacional.
Nzall

Nate, obrigado! Na verdade, eu não executei esse script de shell. Usei-o como fonte de aprendizado para desinstalador na plataforma Mac OS X (Linux como OS). Pensei que talvez ele tenha algum sabor especial do bash, que tenha algum significado, seja repetido dentro de um script.
Barat Sahdzijeu

O #!mesmo uso no nível do kernel (veja man execve) em qualquer sistema Unix (OpenBSD, FreeBSD, MacOS X, Kali-linux…). O bashsimplesmente vê isso como um comentário.
dan

@NateKerkhofs E o que há mv ln cp dd vi ...junto com outros 200 comandos? Por que você não está estressando eles também? Eles podem se sentir deixados de fora.
ott--
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.