GNU/Linux >> Linux Esercitazione >  >> Linux

Modo per incorporare un binario eseguibile in uno script di shell senza strumenti aggiuntivi?

Sto cercando un modo per avere un binario eseguibile cablato in uno script. Qualcosa del genere:

#!/bin/bash
...some shell code
execute binary:
    >>>
        binary
        code
        ...
    <<<
...some more shell code possibly

Ho trovato questa soluzione, che utilizza uuencode ed è buono. Ma dipende da shrutils , che sembrano essere un extra, in quanto non sono inclusi per impostazione predefinita sulla mia Debian.

Stavo pensando di avere il binario codificato con base64 e poi decodificarlo e in qualche modo in esecuzione, possibilmente senza creare alcun file temporaneo. Ricordo che c'era una biblioteca responsabile dell'esecuzione delle cose, ma ho dimenticato cosa fosse.

Potrebbe essere la cosa migliore per eseguire un costrutto semplice come questo:

$ <(base64 out | base64 -d)
bash: /dev/fd/63: Permission denied

Risposta accettata:

Che ne dici di:

unpack() {
    tail +9 "$0" > /tmp/xxx.$$
    chmod +x /tmp/xxx.$$
}
unpack
/tmp/xxx.$$ <add args here>
rm /tmp/xxx.$$
exit
<add the binary here>

Se non ti piace avere dati binari nello script, puoi codificarli e sostituirli cat dal relativo decoder.

Nota che devi sostituire +9 dal numero di riga in cui inizia il binario nel caso in cui modifichi lo script in modo che abbia una lunghezza diversa.

Se la tua tail l'implementazione non supporta l'argomento +9 , prova -n +9 invece.

Se hai paura di rovinare un file /tmp esistente, prova a usare mktemp(1) per creare il nome del file tmp.

Nota che questo metodo è stato utilizzato dagli script di aggiornamento per SunPro suite di compilatori che includeva l'archivio tar compresso con l'intero aggiornamento e del codice shell per gestirne la gestione.


Linux
  1. Timeout in uno script di shell?

  2. Script contro una riga?

  3. Come disassemblare un eseguibile binario in Linux per ottenere il codice assembly?

  4. Converti i dati binari in esadecimali in uno script di shell

  5. Lo script della shell funziona bene senza la linea shebang? Come mai?

Processi in una sessione in una shell interattiva vs in uno script?

Il significato di $? In uno script di shell?

Directory corrente dello script Shell?

Come eseguire il codice nella shell Django da uno script Python esterno?

impossibile eseguire il file binario quando si tenta di eseguire uno script di shell su Linux

Come eseguire un file senza estensione .sh nella shell