シェルスクリプトにバイナリファイルを添付して、添付ファイルの展開→インストールなんてことをやってるのを時々見るので、実現する方法を書く。
まず、添付するバイナリファイルと、下記のようなバイナリとくっつくスクリプトを用意する。
$ ls
main.sh nyan.tar.xz
$ tar Jtf nyan.tar.xz
nyan/
nyan/nya-n.sh
main.sh
#!/bin/bash
sep='#---FILE---'
(
# 添付ファイルまで読み進める
while read line
do [[ "$line" = "$sep" ]] && break
done
# 添付ファイルを展開する
tar Jx
) < $0
# 添付ファイルを実行
nyan/nya-n.sh # nyaaaaaan と出力されるだけのスクリプト
exit 0
#---FILE---
main.sh
の最終行は、空行である必要がある。
上記の2ファイルを結合する:
$ cat main.sh nyan.tar.xz > attached_file_main.sh
これで完成。
試しに実行してみましょう:
$ bash attached_file_main.sh
nyaaaaaan
$ ls -RF
.:
attached_file_main.sh main.sh nyan/ nyan.tar.xz
./nyan:
nya-n.sh*
ファイル展開と、展開後の実行が成功しているのが確認できる。