Je veux exécuter un sous-shell bash, (1) exécuter quelques commandes, (2), puis rester dans ce sous-shell pour faire ce que je veux. Je peux faire chacune de ces choses individuellement:
Exécutez la commande en utilisant
-c
flag:$> bash -c "ls; pwd; <other commands...>"
Cependant, il retourne immédiatement au "super" shell après l'exécution des commandes. Je peux aussi simplement lancer un sous-shell interactif:
Démarrer un nouveau
bash
processus:$> bash
et il ne quittera pas le sous-shell tant que je ne le dirai pas explicitement ... mais je ne pourrai exécuter aucune commande initiale. La solution la plus proche que j'ai trouvée est:
$> bash -c "ls; pwd; <other commands>; exec bash"
qui fonctionne, mais pas comme je le voulais, car il exécute les commandes données dans un sous-shell, puis en ouvre un autre pour l’interaction.
Je veux le faire sur une seule ligne. Une fois que je quitte le sous-shell, je devrais revenir au shell "super" habituel sans incident. Il doit y avoir un moyen ~~
NB: Ce que je ne demande pas ...
- ne pas demander où trouver la page de manuel bash
- ne demande pas comment lire les commandes d'initialisation à partir d'un fichier ... Je sais comment faire cela, ce n'est pas la solution que je cherche
- pas intéressé à utiliser tmux ou gnu screen
- pas intéressé à donner un contexte à cela. C'est-à-dire que la question est censée être générale et non à des fins spécifiques
- Si possible, je veux éviter d'utiliser des solutions de contournement qui accomplissent ce que je veux, mais d'une manière "sale". Je veux juste faire ceci sur une seule ligne. En particulier, je ne veux pas faire quelque chose comme
xterm -e 'ls'
exec bash
solution implique deux sous-réservoirs distincts. Je veux un sous-shell continu.
exec
est qu'il remplace le premier sous-shell par le second, de sorte qu'il ne vous reste qu'un shell en dessous du parent. Si vos commandes d'initialisation définissent des variables d'environnement, elles existeront dans le shell exécuté.
exec
c'est que vous perdez tout ce qui n'est pas transmis aux sous-shell via l'environnement, tels que les variables non exportées, les fonctions, les alias, ...
exec bash
solution ne vous convient-elle pas?