Usando sed
e redirecionamento de E / S:
{
sed -n '1,64p' wizard-run;
base64 package.deb;
sed -n '66,$p' wizard-run;
} > wizard-run.tmp && mv wizard-run.tmp wizard-run
Estou trabalhando em um "edgemax feature-wizard", que é uma espécie de sistema de plugins. Existem apenas três arquivos permitidos em um tarball de plug-in: um script bash como backend, um arquivo HTML como frontend e um arquivo validation.json para validação de entrada do frontend, então por favor não pergunte por que eu não coloco os pacotes deb no tarball - eles são ignorados.
Eu quero enviar pacotes deb com esse "assistente", então tenho que codificar com base64 os arquivos e colocá-los no script bash a ser extraído quando o script for executado. Agora, sei como fazer tudo isso, mas estou fazendo isso manualmente copiando e colando a parte base64 no arquivo bash e, em seguida, copiando e colando na posição correta, o que não é prático quando atualizo esses pacotes para a versão recente.
Haveria a possibilidade de codificar os arquivos deb em base64 e escrevê-lo na linha 65 do script bash?
Li artigo e eu tentei
sed -i "65i\$(base64 package.deb)" wizard-run
mas que reclama com:
bash: /bin/sed: Argument list too long
Aqui está meu código; a parte base64 tem que ir dentro das aspas duplas da instrução 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