Revisando um script bash - Invocando uma mudança de cor de prompt por meio de um arquivo temporário

1

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.

    
por Andrew 08.11.2012 / 20:37

2 respostas

0

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 .

    
por 08.11.2012 / 20:47
0

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 .

    
por 09.11.2012 / 00:49