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