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

相关内容