
Я работаю над "edgemax feature-wizard", что является своего рода системой плагинов. В tarball плагина разрешено только три файла: скрипт bash как бэкэнд, файл HTML как фронтэнд и файл validation.json для проверки ввода с фронтэнда, так что, пожалуйста, не спрашивайте, почему я просто не помещаю deb-пакеты в tarball — они игнорируются.
Я хочу отправлять deb-пакеты с этим "мастером", поэтому мне нужно закодировать файлы в base64 и поместить их в скрипт bash для извлечения при запуске скрипта. Теперь я знаю, как все это сделать, но я делаю это вручную, копируя-вставляя часть base64 в файл bash, а затем вырезая-вставляя в нужное место, что неудобно при обновлении этих пакетов до последней версии.
Можно ли закодировать deb-файлы в base64 и записать их в строку 65 скрипта bash?
я прочелЭта статьяи я попробовал
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
и перенаправление ввода-вывода:
{
sed -n '1,64p' wizard-run;
base64 package.deb;
sed -n '66,$p' wizard-run;
} > wizard-run.tmp && mv wizard-run.tmp wizard-run