GNU/Linux >> Tutoriales Linux >  >> Linux

Manera de incrustar un binario ejecutable en un script de Shell sin herramientas adicionales?

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.


Linux
  1. ¿Determinar Shell en el script durante el tiempo de ejecución?

  2. ¿Tiempo de espera agotado en un script de Shell?

  3. ¿Determinar la ruta al script de Shell de origen?

  4. ¿Procesos en una sesión en un shell interactivo versus en un script?

  5. ¿Guión Vs de una sola línea?

Convierta datos binarios a hexadecimales en un script de shell

¿El script de Shell funciona bien sin la línea shebang? ¿Por qué?

¿Cómo obtener el código de salida del proceso generado en el script de shell esperado?

Cálculo del porcentaje redondeado en Shell Script sin usar bc

forma correcta de codificar/incrustar el número de versión en el código del programa

Cómo ejecutar un archivo sin extensión .sh en shell