
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 sed
y 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