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.