Comment changer l'invite du sous-shell

8

J'essaie de créer un script simple qui, entre autres choses, créera un sous-shell:

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown

La question est: je dois changer l'invite par défaut, donc par exemple:

$ # shell par défaut
$ ./myscript
(myscript) $ #
subshell (myscript) $ exit
$

J'ai essayé de changer PROMPTet PS1, mais aucun de ces travaux. Comment puis je faire ça?

PS: J'ai besoin d'une solution qui fonctionne à la fois sur Bash et ZSH, si possible.

Lucas Sampaio
la source
Pas de duplicata exact car cette autre question était pour bashseulement.
Stéphane Chazelas
Ressemble au bon duplicata ;-(
daisy

Réponses:

7

Je pense que vous pouvez créer un sous-shell avec une invite différente comme celle-ci:

$ bash --rcfile <(echo "PS1='subshell prompt: '") -i

Exemple

Env. Actuel:

$ bash --rcfile <(echo "PS1='subshell prompt$ '") -i

Dans le sous-shell:

subshell prompt$ echo hi
hi
subshell prompt$ exit
exit

Retour à la coque d'origine:

$ 
slm
la source
1
Vous pouvez utiliser un here stringau lieu de la substitution de processus. par exemple <<< "PS1...".
jordanm
1
@jordanm - pouvez-vous donner un exemple? Je me suis amusé avec cela, mais je n'ai pas pu obtenir d'exemple de travail en utilisant les chaînes ici.
slm
2

La raison pour laquelle il ne fonctionne pas peut - être parce que lorsque vous chargez la coque (qui devrait être par exemple .: /bin/bash), il finira par rechargeant ses fichiers de configuration, qui comprennent les variables d'environnement pour l'invite (par exemple .: $HOME/.bashrc) après avoir été passé le variables d'environnement que vous voulez - ainsi vos variables sont rejetées.

Vous voudrez peut-être vérifier les options du shell pour charger des fichiers de configuration personnalisés (par exemple: --rcfiledans Bash IINM) et les utiliser ainsi que \envpour passer les variables d'environnement que vous souhaitez. Le problème est qu'une fois que vous faites cela, le tir du sous-shell devient dépendant du shell.

( CAVEAT EMPTOR : Je ne considère pas que ce soit une réponse pour le moment - en particulier, je n'ai encore rien essayé dans mon système.)

Luis Machuca
la source