bash:如何將base64編碼的內容寫入檔案中的指定行

bash:如何將base64編碼的內容寫入檔案中的指定行

我正在開發一個“edgemax 功能嚮導”,它是一種插件系統。插件 tarball 中只允許包含三個檔案:作為後端的 bash 腳本、作為前端的 HTML 文件和用於前端輸入驗證的validation.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

相關內容