Une approche intéressante pour résoudre ce problème pourrait être d'utiliser le point de contrôle du processus ou l'hibernation du processus.
Cela impliquerait essentiellement d'ajouter un délai de sommeil initial au début de votre script bash. Démarrez l'interpréteur bash comme d'habitude, le script dort - et ensuite vous "hibernez" le processus. Cela enregistrerait en gros son état dans un fichier binaire sur le disque.
Plus tard, vous pourrez reprendre le fichier (sur n'importe quel ordinateur), ce qui reprendrait l'exécution de votre programme.
C'est une méthode qui ne nécessite pas de réimplémenter le langage shell bash. En revanche, il existe un risque que cela ne fonctionne pas avec de grands scripts ou similaires, où les descripteurs de fichier devraient être automatiquement rouverts pour que bash lise à nouveau le script (ce qui va à l'encontre de l'objectif de cette question).
Le seul problème maintenant est que je ne connais pas d'outil d'hibernation de processus pour macOS actuellement. Vous devriez probablement commencer par en construire un (ou en porter un). Vous pourriez regarder des solutions pour d'autres systèmes d'exploitation, comme par exemple les outils Linux CRIU, CryoPID et ckpt.
Un moyen très détourné d'obtenir quelque chose de similaire à cela serait d'utiliser un système de virtualisation tel que VMware ou même quelque chose comme Docker sur Mac. Exécutez le script à l'intérieur de Docker par exemple, mettez en pause votre conteneur lorsque le script dort (le conteneur est alors en pause). Ensuite, supprimez le script shell du stockage - et plus tard, vous pourriez restaurer le conteneur pour reprendre l'exécution.
1 votes
C'est la même question que vous avez posée qui a été fermée! apple.stackexchange.com/questions/402870/…
7 votes
Comme indiqué, c'est impossible. Les scripts bash sont, par définition, des fichiers texte qui indiquent à bash ce qu'il doit faire, et non des exécutables binaires qui seraient chargés par le noyau. Selon votre objectif réel, il pourrait y avoir un moyen d'y parvenir, mais vous devriez expliquer ce que vous essayez réellement de réaliser (voir problème XY).
2 votes
Doit-il s'agir d'un script bash? Il existe d'autres langages plus adaptés pour produire un binaire compilé ou du pseudo-code.
0 votes
Comme le dit @GordonDavisson, cela ressemble à un problème X-Y. Pouvez-vous préciser pourquoi vous voulez un exécutable ? Obfuscation du code ? Performance ? Incapacité à apporter des modifications ? Capacité à s'exécuter sans installation de shell ? Capacité à avoir une icône et à être dans le Dock ? Capacité à s'exécuter en double-cliquant ? (Il y a probablement différentes solutions en fonction de vos besoins réels.)