bash:base64でエンコードされたコンテンツをファイルの指定された行に書き込む方法

bash:base64でエンコードされたコンテンツをファイルの指定された行に書き込む方法

私はプラグインシステム「edgemax機能ウィザード」を開発しています。プラグインtarballには3つのファイルしかありません:バックエンドとしてbashスクリプト、フロントエンドとしてHTMLファイル、フロントエンド入力検証用の検証.jsonファイルなので、なぜ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

おすすめ記事