bash: base64 でエンコードされたコンテンツを指定された行にファイルに書き込むにはどうすればいいですか?

bash: base64 でエンコードされたコンテンツを指定された行にファイルに書き込むにはどうすればいいですか?

私は、プラグイン システムの一種である「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

sedI/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

関連情報