PS1 é exibido apenas para prompts interativos. Não tem nada a ver com o prompt mostrado para read -p . A execução de um script bash, mesmo que a leitura de entrada, não seja considerada interativa .
Estou me perguntando por que o script a seguir não funciona:
#!/bin/bash
read -p 'First lets write PROMPT.SH'
echo '#!/bin/bash'>prompt.sh
echo "export PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '">>prompt.sh
read -p "Change Title and Prompt"
source prompt.sh
echo texttexttext
read -p "Now lets tidy up PROMPT.SH"
rm ./prompt.sh
read -p "That was the program"
O que estou tentando fazer é alterar o título da janela, o prompt e a cor do texto com os quais normalmente posso trabalhar,
PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '
durante uma sessão bash regular, mas não quando eu a adiciono a um script e depois executo o script.
PS1 é exibido apenas para prompts interativos. Não tem nada a ver com o prompt mostrado para read -p . A execução de um script bash, mesmo que a leitura de entrada, não seja considerada interativa .
Não estou muito claro sobre o que você está tentando fazer, mas acho que está definindo PS1 para seu shell interativo a partir de um script. Dito assim, você não pode fazer isso. Nos sistemas * nix e Unix, as características / propriedades do processo são passadas de pai para filho, mas nunca o contrário. Por exemplo, se você definir seu PATH para incluir /foo e, em seguida, executar um script que tente executar bar , ele encontrará /foo/bar , mas se você alterar PATH em um script, ele não não afeta seu shell interativo. Da mesma forma para cd e umask . Estas são as diferenças do mundo Prompt de Comando (lote) do Windows.
Dito isto, há uma resposta e você já sabe disso. Se o seu script (o de 10 linhas) for chamado de andy.sh , você poderá obter o efeito desejado digitando source andy.sh . Mas isso é um exagero bobo (a menos que você esteja fazendo isso apenas para praticar roteiros); basta colocar
PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '
em drew.sh e tipo source drew.sh .
Mas também pesquise o comando alias .
Tags script bash-scripting