
我正在開發一個“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