Comment appeler un script shell tout en restant en mode interactif

1

Quand j'appelle:

execl("/bin/sh", "/bin/sh", (void *) NULL);

Le programme / bin / sh / est lancé, ce qui ouvre un shell dans lequel je peux taper des commandes. Cependant, si j'appelle:

execl("/bin/sh", "/bin/sh", "~/somescript.sh", (char *) 0 );

Le programme / bin / sh est également lancé et exécute le script shell donné, puis se ferme par la suite.

Pourquoi le shell ne reste-t-il pas ouvert après l'exécution d'un script shell? Est-il possible de le garder ouvert après l'exécution du script?

Merci d'avance!

Maricruzz
la source

Réponses:

3

C'est un comportement de shell normal qui n'a rien à voir avec le fait que vous l'exécutiez à partir de C - cela se produit même si vous exécutez le shell avec le script depuis la ligne de commande:

$ sh ~/somescript.sh

Il peut être difficile de forcer Shell à rester en mode interactif après cela. Je n'ai trouvé que l' --rcfile [file]option pour faire ça:

Exécutez les commandes à partir du fichier au lieu du fichier d'initialisation système /etc/bash.bashrcet du fichier d'initialisation personnel standard ~/.bashrcsi le shell est interactif (voir INVOCATION ci-dessous).

C'est-à-dire que vous feriez

$ sh --rcfile ~/somescript.sh

Mais les fichiers rc de votre système aiment /etc/bash.bashrcet ~/.bashrcne seront pas exécutés dans ce cas.

Tomas
la source
-1

Pourquoi ne pas utiliser un shell interactif à la fin de votre script?

#!/bin/sh

echo STUFF
echo MORE STUFF
sh
Emery Lapinski
la source