bash: como eu escrevo o conteúdo codificado em base64 em um arquivo para a linha especificada

3

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
    
por vchrizz 24.10.2016 / 21:37

1 resposta

2

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
    
por 24.10.2016 / 21:54

Tags