bash: como escrevo conteúdo codificado em base64 em um arquivo na linha especificada

bash: como escrevo conteúdo codificado em base64 em um arquivo na linha especificada

Estou trabalhando em um "assistente de recursos edgemax", que é uma espécie de sistema de plugins. Existem apenas três arquivos permitidos em um tarball de plugin: um script bash como backend, um arquivo HTML como frontend e um arquivo validação.json para validação de entrada do frontend, então por favor não pergunte por que eu não coloco apenas os pacotes deb no tarball - eles são ignorados.

Quero enviar pacotes deb com esse "assistente", então tenho que codificar os arquivos em base64 e colocá-los no script bash para serem extraídos quando o script for executado. Agora, eu sei como fazer tudo isso, mas estou fazendo isso manualmente, copiando e colando a parte base64 no arquivo bash e depois recortando e colando na posição correta, o que é inconveniente ao atualizar esses pacotes para a versão recente.

Haveria a possibilidade de codificar os arquivos deb em base64 e gravá-los na linha 65 do script bash?

Eu liEste artigoe eu tentei

sed -i "65i\\$(base64 package.deb)" wizard-run

mas isso reclama com:

bash: /bin/sed: Argument list too long

Aqui está o meu código; a parte base64 deve estar entre 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

Responder1

Usando sede 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

informação relacionada