実行可能バイナリをスクリプトにハードワイヤードする方法を探しています。このようなもの:
#!/bin/bash
...some shell code
execute binary:
>>>
binary
code
...
<<<
...some more shell code possibly
uuencode
を使用するこのソリューションを見つけました そして良いです。しかし、それはshrutils
に依存します 、これは私のDebianにデフォルトで含まれていないので、余分なようです。
バイナリをbase64
でエンコードすることを考えていました 次にそれをデコードしてどういうわけか おそらく一時ファイルを作成せずに実行します。物事を実行する責任がある図書館があったことを覚えていますが、それが何であったかを忘れていました。
これを実行するのと同じくらい単純な構成にするのが最善かもしれません:
$ <(base64 out | base64 -d)
bash: /dev/fd/63: Permission denied
承認された回答:
どうですか:
unpack() {
tail +9 "$0" > /tmp/xxx.$$
chmod +x /tmp/xxx.$$
}
unpack
/tmp/xxx.$$ <add args here>
rm /tmp/xxx.$$
exit
<add the binary here>
スクリプトにバイナリデータを含めたくない場合は、それをエンコードしてcat
に置き換えることができます。 関連するデコーダーによる。
+9
を置き換える必要があることに注意してください スクリプトを異なる長さに変更した場合に、バイナリが開始する行番号で。
tail
の場合 実装は引数+9
をサポートしていません 、-n +9
を試してください 代わりに。
既存の/tmpファイルを壊すのが怖い場合は、mktemp(1)
を使用してみてください。 tmpファイル名を作成します。
このメソッドは、SunPro
のアップグレードスクリプトで使用されていることに注意してください。 アップグレード全体とその周辺の処理を管理するためのいくつかのシェルコードを含む圧縮されたtarアーカイブを含むコンパイラスイート。