Réviser un script bash - Invoquer un changement de couleur d'invite via un fichier temporaire

1

Je me demande pourquoi le script suivant ne fonctionne pas:

#!/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"

Ce que j'essaie de faire est de changer le titre de la fenêtre, l'invite et la couleur du texte que je peux normalement faire avec,

PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '

pendant une session bash régulière, mais pas lorsque je l'ajoute à un script, puis que je l'exécute.

Andrew
la source

Réponses:

0

PS1s'affiche uniquement pour les invites interactives. Cela n'a rien à voir avec l'invite affichée read -p. L'exécution d'un script bash, même si vous lisez des entrées, n'est pas considérée comme interactive .

Daniel Beck
la source
0

Je ne comprends pas très bien ce que vous essayez de faire, mais j'imagine que vous définissez PS1un script pour votre shell interactif. Dit comme ça, tu ne peux pas le faire. Dans les systèmes * nix et similaires à Unix, les caractéristiques / propriétés du processus sont transmises de parent à enfant, mais jamais l'inverse. Par exemple, si vous définissez votre PATHoption pour inclure /foo, puis exécutez un script qui tente de s'exécuter bar, elle le trouvera /foo/bar. Toutefois, si vous modifiez PATHun script, cela n'affectera pas votre shell interactif. De même pour cdet umask. Ce sont des différences avec le monde d'invite de commande Windows (batch).

Cela dit, il y a une réponse et vous la connaissez déjà. Si votre script (celui sur 10 lignes) est appelé andy.sh, vous devriez pouvoir obtenir l’effet souhaité en le tapant source andy.sh. Mais c’est exagéré (à moins que vous ne le fassiez uniquement pour la pratique de l’écriture de scripts); viens de mettre

PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '

dans drew.shet tapez source drew.sh.

Mais aussi rechercher la aliascommande.

Scott
la source