Quindi, se ho capito bene, vuoi includere un binario nello script ed eseguirlo all'uscita dello script?
Ecco uno script binarymaker
(Questo non solo crea uno script che estrae un binario, ma si fonde qualsiasi vostro script con qualsiasi binario):
#!/bin/bash
lineCount=$(wc -l "$1" | cut -f 1 -d ' ') # just get the line count
((lineCount+=2)) # because we are going to append a line
head -n 1 "$1" > "$3" # this is done to ensure that shebang is preserved
echo "trap 'tail -n +$lineCount \$0 > binary; chmod +x binary; ./binary' EXIT" >> "$3"
tail -n +2 "$1" >> "$3"
cat "$2" >> "$3"
exit 0
è necessario eseguire in questo modo
./binarymaker myscript mybinary resultscript
Se si esegue resultscript
, verranno eseguiti sia myscript
sia mybinary
. In seguito è possibile aggiungere un comando al binario rm
.
Inoltre, non dimenticare di exit alla fine dello script perché altrimenti continuerà e tenterà di analizzare i dati binari.
Se si lavora con un altro script e non un binario, allora può essere eseguito da pipa come questo:
tail -n +$lineCount \$0 | source /dev/stdin
Ma non sta andando a lavorare su binari reali. Inoltre, non funziona se la tua versione di bash è inferiore a 4
fonte
2013-08-23 20:49:23
So che è possibile, perché l'ho visto fare nello script di installazione MKL di Intel. Non sono sicuro * come * è stato fatto, ma è possibile. – SethMMorton
possibile duplicato di [Incorpora un binario eseguibile in uno script di shell] (http://stackoverflow.com/questions/10491704/embed-a-executable-binary-in-a-shell-script) – mschilli
java 6 jdk di avere una forma di distribuzione di un singolo file '.sh' di oltre 80 MB, dove lo script" terminò "con una riga' exit 0' e le parti binarie lo seguirono. lo script estraeva le parti binarie da se stesso con una riga come 'tail $ {tail_args} +189" $ 0 "> $ outname'; ha fatto un 'trap' con' rm', ha fatto un 'sum' per checksum, un' chmod' ed eseguito come './$ outname' – n611x007