
私は、プラグイン システムの一種である「edgemax feature-wizard」に取り組んでいます。プラグイン tarball で許可されるファイルは、バックエンドとしての bash スクリプト、フロントエンドとしての HTML ファイル、およびフロントエンドからの入力検証用の validation.json ファイルの 3 つだけです。そのため、なぜ deb パッケージを tarball に入れないのかと聞かないでください。それらは無視されます。
私はその「ウィザード」を使って deb パッケージを出荷したいので、ファイルを base64 でエンコードし、それを bash スクリプトに入れて、スクリプトの実行時に抽出されるようにする必要があります。今、私はこれらすべてを行う方法を知っていますが、base64 部分を bash ファイルにコピーして貼り付け、正しい位置にカット アンド ペーストすることで手動で行っています。これは、それらのパッケージを最新バージョンに更新するときに不便です。
deb ファイルを base64 でエンコードし、それを bash スクリプトの 65 行目に書き込むことは可能でしょうか?
もう読んだこの記事そして私は試した
sed -i "65i\\$(base64 package.deb)" wizard-run
しかし、次のような不満があります:
bash: /bin/sed: Argument list too long
これが私のコードです。base64 部分は echo ステートメントの二重引用符内に記述する必要があります。
if [ $arch == 'mips' ]; then
# base64: olsrd_0.9.0.3-1_mips.deb
echo "
<base64encoded-pkg>
" | base64 -d > $cfgusrdir/olsrd_0.9.0.3-1_mips.deb
# base64: olsrd-plugins_0.9.0.3-1_mips.deb
echo "
<base64encoded-pkg>
" | base64 -d > $cfgusrdir/olsrd-plugins_0.9.0.3-1_mips.deb
fi
答え1
sed
I/O リダイレクトの 使用:
{
sed -n '1,64p' wizard-run;
base64 package.deb;
sed -n '66,$p' wizard-run;
} > wizard-run.tmp && mv wizard-run.tmp wizard-run