Überarbeiten eines Bash-Skripts - Aufrufen einer Änderung der Eingabeaufforderungsfarbe über eine temporäre Datei

Überarbeiten eines Bash-Skripts - Aufrufen einer Änderung der Eingabeaufforderungsfarbe über eine temporäre Datei

Ich frage mich, warum das folgende Skript nicht funktioniert:

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

Ich versuche, den Fenstertitel, die Eingabeaufforderung und die Textfarbe zu ändern, was mir normalerweise möglich ist.

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

während einer regulären Bash-Sitzung, aber nicht, wenn ich es zu einem Skript hinzufüge und dann das Skript ausführe.

Antwort1

PS1wird nur für interaktive Eingabeaufforderungen angezeigt. Es hat nichts mit der Eingabeaufforderung zu tun, die für angezeigt wird read -p. Die Ausführung eines Bash-Skripts, auch wenn die Eingabe gelesen wird, wird nicht berücksichtigt.interaktiv.

Antwort2

Mir ist nicht ganz klar, was Sie versuchen, aber ich vermute, es sind Einstellungen PS1für Ihre interaktive Shell aus einem Skript. So ausgedrückt können Sie das nicht tun. In *nix- und Unix-ähnlichen Systemen werden Prozessmerkmale/-eigenschaften vom übergeordneten zum untergeordneten Prozess weitergegeben, aber nie umgekehrt. Wenn Sie beispielsweise Ihren auf PATHinclude setzen /foound dann ein Skript ausführen, das versucht, auszuführen bar, wird es finden /foo/bar– aber wenn Sie PATHin einem Skript Änderungen vornehmen, wirkt sich dies nicht auf Ihre interaktive Shell aus. Gleiches gilt für cdund umask. Dies sind Unterschiede zur Windows-Eingabeaufforderung (Batch).

Allerdings gibt es eine Antwort, und Sie kennen sie bereits. Wenn Ihr Skript (das 10-zeilige) aufgerufen wird andy.sh, sollten Sie den gewünschten Effekt erzielen, indem Sie eingeben source andy.sh. Aber das ist ein alberner Overkill (es sei denn, Sie tun es nur, um das Skriptschreiben zu üben); geben Sie einfach ein

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

in drew.shund geben Sie ein source drew.sh.

Recherchieren Sie aber auch den aliasBefehl.

verwandte Informationen