Como alterar o prompt do subshell

8

Estou tentando criar um script simples que, entre outras coisas, criará um subshell:

#!/bin/sh

# setup

"${@:-$SHELL}"

# teardown

A questão é: preciso alterar o prompt padrão, por exemplo:

$ # shell padrão
$ ./myscript
(myscript) $ # subshell
(myscript) $ exit
$

Eu tentei mudar PROMPTe PS1, mas nenhuma dessas obras. Como eu posso fazer isso?

PS .: Preciso de uma solução que funcione tanto no Bash quanto no ZSH, se possível.

Lucas Sampaio
fonte
Possível publicação de Alterando o PS1 em um subshell interativo facilmente
Thomas Nyman
Não é duplicata exata, pois a outra pergunta era bashapenas para ela .
Stéphane Chazelas
Se parece com o duplicado direito ;-(
daisy

Respostas:

7

Eu acho que você pode criar um subshell com um prompt diferente como este:

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

Exemplo

Env atual:

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

No sub shell:

subshell prompt$ echo hi
hi
subshell prompt$ exit
exit

Voltar ao shell original:

$ 
slm
fonte
1
Você pode usar uma here stringsubstituição em vez da substituição do processo. por exemplo <<< "PS1...".
Jordanm
1
@jordanm - você pode dar um exemplo? Eu brinquei com isso, mas não consegui um exemplo de trabalho usando as strings here.
slm
2

O motivo ele não funciona pode ser porque quando você carrega o shell (que deve ser, por exemplo .: /bin/bash), ele vai acabar de recarregar seus arquivos de configuração, que incluem as variáveis de ambiente para o prompt (ex .: $HOME/.bashrc) depois de ser passado a variáveis ​​de ambiente que você deseja - portanto, suas variáveis ​​são descartadas.

Convém verificar as opções do shell para carregar arquivos de configuração personalizados (por exemplo: --rcfileno Bash IINM) e usá-los, além \envde passar as variáveis ​​de ambiente que você deseja. O problema é que, assim que você dispara, o subshell se torna dependente do shell.

( CAVEAT EMPTOR : Ainda não considero que seja uma resposta - em particular, ainda não tentei nada disso no meu sistema.)

Luis Machuca
fonte