Shebang multipli in un unico file bash


8

Ho uno script di un'altra persona che ha un aspetto (nota: è un singolo file):

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

#!/bin/bash

some commands
some commands

Mi chiedo qual è lo scopo del secondo e terzo shebang? È per errore o di proposito?


Gli estranei sono #!/bin/bashpreceduti dal <<costrutto (qui documento) come some command <<end_of_script_flag:?
dan

Nessun <<costrutto. Solo semplici trans e alcuni comandi di rimozione (questo era lo script di disinstallazione)
Barat Sahdzijeu,

È possibile che lo script sia stato assemblato da script destinati a essere eseguiti in successione o che il file dovesse essere suddiviso in più script indipendenti ma la divisione non è riuscita. Cosa c'è poco prima delle #!linee extra ?
Gilles 'SO- smetti di essere malvagio' il

@Gilles, credo che non ci siano scopi nascosti extra di quella sceneggiatura. È uno script statico chiamato Uninstall.command(piattaforma: Mac OS X).
Barat Sahdzijeu,

Risposte:


9

Se queste righe non sono l'inizio degli script di shell inclusi da costruire, ovvero all'interno di uno schema del modulo:

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

Quindi il costrutto ripetuto che hai trovato è il risultato di molti copy- pastedi script full shell ma senza abbastanza cura e comprensione di quale sia l'uso di questi commenti molto speciali sulla riga 1 degli script, a cominciare #!.

Fai attenzione prima di usare un tale script di shell (no sudo, no su:)).


A proposito, ci sono un sacco di sudo ... Jeezzz ...
Barat Sahdzijeu,

/bin/rm(+ roba fittizia per alimentare il robot)!
dan

3
... o combinando più script bash simili a come verrebbero eseguiti se sourceli si chiamasse per nome. Non vedo la necessità per il cervello di commentare, però. È perfettamente ammissibile in questo modo ed è la vera ragione per cui lo shebang è una linea di commento.
0xC0000022L

Dopo una seconda occhiata ho notato alcune altre righe ripetute, quindi tendo a pensare che sia solo incurante copia-incolla da più script.
Barat Sahdzijeu,

4

Nessuno scopo, questi sono solo commenti. A meno che "alcuni comandi" contenga alcuni comandi che lo salvano in un file separato per successive esecuzioni.


Nessuna operazione di scrittura e successive esecuzioni. Questo script è solo un insieme di rmoperazioni che disinstallano alcune applicazioni. Ho pensato che potesse essere correlato al fork di una nuova shell, ma apparentemente era una copia sporca incollata dal creatore dello script.
Barat Sahdzijeu,

@BaratSahdzijeu STAI ATTENTO CON GLI SCRIPTS RANDOM CON Rm IN QUI! Ci scusiamo per le protezioni, ma non posso sottolineare quanto sia importante. Se l'autore originale ha commesso gli errori giusti (o meglio, gli errori sbagliati), può danneggiare altri software sulla macchina e persino rompere il sistema operativo.
Nzall,

Nate, grazie! In realtà non ho eseguito quello script di shell. L'ho usato come fonte di apprendimento per il programma di disinstallazione sulla piattaforma Mac OS X (Linux come OS). Pensato che forse abbia un sapore speciale di bash che ha un significato che è ripetuto in una sceneggiatura.
Barat Sahdzijeu,

Lo #!stesso uso a livello di kernel (vedi man execve) su qualsiasi sistema Unix (OpenBSD, FreeBSD, MacOS X, Kali-linux ...). Lo bashvede semplicemente come un commento.
dan

@NateKerkhofs E cosa ci sono mv ln cp dd vi ...insieme ad altri 200 comandi? Perché non le stai stressando? Potrebbero sentirsi esclusi.
ott--
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.