Estou me perguntando por que o seguinte script 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 que normalmente consigo fazer,
PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '
durante uma sessão regular do bash, mas não quando eu o adiciono a um script e depois executo o script.
Responder1
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 lendo a entrada, não é consideradainterativo.
Responder2
Não tenho certeza do que você está tentando fazer, mas acho que é uma configuração PS1
para seu shell interativo a partir de um script. Dito assim, você não pode fazer isso. Em sistemas *nix e semelhantes ao 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
como include /foo
e, em seguida, executar um script que tenta executar bar
, ele será encontrado /foo/bar
- mas se você alterar PATH
um script, isso não afetará seu shell interativo. Da mesma forma para cd
e umask
. Essas são diferenças em relação ao mundo do prompt de comando do Windows (lote).
Dito isto, há uma resposta e você já sabe disso. Se o seu script (o de 10 linhas) for chamado 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 a redação do roteiro); apenas coloque
PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '
em drew.sh
e digite source drew.sh
.
Mas também pesquise o alias
comando.