Estoy buscando una manera de tener un binario ejecutable integrado en un script. Algo como esto:
#!/bin/bash
...some shell code
execute binary:
>>>
binary
code
...
<<<
...some more shell code possibly
Encontré esta solución, que usa uuencode
y es bueno Pero depende de shrutils
, que parecen ser un extra, ya que no están incluidos de forma predeterminada en mi Debian.
He estado pensando en codificar el binario con base64
y luego decodificarlo y de alguna manera ejecutándose, posiblemente sin crear ningún archivo temporal. Recuerdo que había una biblioteca que se encarga de ejecutar cosas, pero olvidé cuál era.
Podría ser mejor tener una construcción tan simple como esta ejecución:
$ <(base64 out | base64 -d)
bash: /dev/fd/63: Permission denied
Respuesta aceptada:
¿Qué tal:
unpack() {
tail +9 "$0" > /tmp/xxx.$$
chmod +x /tmp/xxx.$$
}
unpack
/tmp/xxx.$$ <add args here>
rm /tmp/xxx.$$
exit
<add the binary here>
Si no le gusta tener datos binarios en el script, puede codificarlos y reemplazar cat
por el decodificador relacionado.
Tenga en cuenta que debe reemplazar el +9
por el número de línea donde comienza el binario en caso de que modifique el script para que tenga una longitud diferente.
Si tu tail
la implementación no admite el argumento +9
, prueba -n +9
en su lugar.
Si tiene miedo de destruir un archivo /tmp existente, intente usar mktemp(1)
para crear el nombre de archivo tmp.
Tenga en cuenta que este método fue utilizado por los scripts de actualización para el SunPro
paquete de compilación que incluía el archivo tar comprimido con la actualización completa y algún código de shell para administrar el manejo de eso.