bash: ¿cómo escribo contenido codificado en base64 en un archivo en la línea especificada?

bash: ¿cómo escribo contenido codificado en base64 en un archivo en la línea especificada?

Estoy trabajando en un "asistente de funciones edgemax", que es una especie de sistema de complementos. Solo se permiten tres archivos en un tarball de complemento: un script bash como backend, un archivo HTML como frontend y un archivo validation.json para la validación de entrada desde el frontend, así que no pregunten por qué no pongo simplemente los paquetes deb. en el tarball: son ignorados.

Quiero enviar paquetes deb con ese "asistente", así que tengo que codificar los archivos en base64 y colocarlos en el script bash para extraerlos cuando se ejecute el script. Ahora, sé cómo hacer todo esto, pero lo hago manualmente copiando y pegando la parte base64 en el archivo bash y luego cortando y pegando en la posición correcta, lo cual no es útil al actualizar esos paquetes a una versión reciente.

¿Habría una posibilidad de codificar los archivos deb en base64 y escribirlos en la línea 65 del script bash?

he leídoEste artículoy lo intenté

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

pero eso se queja con:

bash: /bin/sed: Argument list too long

Aquí está mi código; la parte base64 tiene que ir entre comillas dobles de la declaración de eco:

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

Respuesta1

Uso sedy redirección 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

información relacionada