Ich suche nach einer Möglichkeit, eine ausführbare Binärdatei fest in ein Skript zu integrieren. Etwa so:
#!/bin/bash
...some shell code
execute binary:
>>>
binary
code
...
<<<
...some more shell code possibly
Ich habe diese Lösung gefunden, die uuencode
verwendet und ist gut. Aber es hängt von shrutils
ab , die ein Extra zu sein scheinen, da sie nicht standardmäßig in meinem Debian enthalten sind.
Ich habe darüber nachgedacht, die Binärdatei mit base64
codieren zu lassen und dann entschlüsseln und irgendwie ausführen, möglicherweise ohne temporäre Dateien zu erstellen. Ich erinnere mich, dass es eine Bibliothek gab, die für die Ausführung von Dingen verantwortlich war, aber ich habe vergessen, was das war.
Es könnte das Beste sein, ein so einfaches Konstrukt wie dieses auszuführen:
$ <(base64 out | base64 -d)
bash: /dev/fd/63: Permission denied
Akzeptierte Antwort:
Wie wäre es mit:
unpack() {
tail +9 "$0" > /tmp/xxx.$$
chmod +x /tmp/xxx.$$
}
unpack
/tmp/xxx.$$ <add args here>
rm /tmp/xxx.$$
exit
<add the binary here>
Wenn Sie keine Binärdaten im Skript haben möchten, können Sie sie codieren und cat
ersetzen durch den zugehörigen Decoder.
Beachten Sie, dass Sie +9
ersetzen müssen durch die Zeilennummer, in der die Binärdatei beginnt, falls Sie das Skript auf eine andere Länge ändern.
Wenn Ihr tail
Implementierung unterstützt das Argument +9
nicht , versuchen Sie -n +9
stattdessen.
Wenn Sie befürchten, eine vorhandene /tmp-Datei zu beschädigen, versuchen Sie, mktemp(1)
zu verwenden um den tmp-Dateinamen zu erstellen.
Beachten Sie, dass diese Methode von den Upgrade-Skripten für SunPro
verwendet wurde Compiler-Suite, die das komprimierte tar-Archiv mit dem gesamten Upgrade und etwas Shell-Code enthielt, um die Handhabung darum herum zu verwalten.