我正在开发一个“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