GNU/Linux >> Tutoriels Linux >  >> Linux

Façon d'intégrer un binaire exécutable dans un script shell sans outils supplémentaires ?

Je cherche un moyen d'avoir un binaire exécutable câblé dans un script. Quelque chose comme ça :

#!/bin/bash
...some shell code
execute binary:
    >>>
        binary
        code
        ...
    <<<
...some more shell code possibly

J'ai trouvé cette solution, qui utilise uuencode et c'est bon. Mais cela dépend de shrutils , qui semblent être un plus, car ils ne sont pas inclus par défaut sur ma Debian.

J'ai pensé à avoir le binaire encodé avec base64 puis le décoder et d'une manière ou d'une autre en cours d'exécution, éventuellement sans créer de fichiers temporaires. Je me souviens qu'il y avait une bibliothèque qui était responsable de l'exécution des choses, mais j'ai oublié ce que c'était.

Il serait peut-être préférable d'avoir une construction aussi simple que cette exécution :

$ <(base64 out | base64 -d)
bash: /dev/fd/63: Permission denied

Réponse acceptée :

Que diriez-vous :

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 vous n'aimez pas avoir des données binaires dans le script, vous pouvez les encoder et remplacer cat par le décodeur associé.

Notez que vous devez remplacer le +9 par le numéro de ligne où le binaire commence au cas où vous modifiez le script pour qu'il soit de longueur différente.

Si votre tail l'implémentation ne prend pas en charge l'argument +9 , essayez -n +9 à la place.

Si vous craignez de saboter un fichier /tmp existant, essayez d'utiliser mktemp(1) pour créer le nom de fichier tmp.

Notez que cette méthode a été utilisée par les scripts de mise à niveau pour le SunPro suite de compilateurs qui comprenait l'archive tar compressée avec toute la mise à niveau et du code shell pour gérer la gestion autour de cela.


Linux
  1. Expiration du délai dans un script shell ?

  2. Linux - Comment tester si un binaire Linux a été compilé en tant que code indépendant de la position ?

  3. Comment faire en sorte qu'un script shell s'exécute toujours en tant que root ?

  4. Comment désassembler un exécutable binaire sous Linux pour obtenir le code assembleur ?

  5. Répertoire courant du script shell ?

One-liner Vs Script ?

La signification de $ ? Dans un script shell ?

Convertir des données binaires en hexadécimal dans un script shell

Le script Shell fonctionne bien sans ligne shebang? Pourquoi?

manière correcte d'encoder/d'intégrer le numéro de version dans le code du programme

Comment exécuter un fichier sans extension .sh dans le shell