2016-06-07 13 views
2

Ich wollte ein kleines Shell-Skript schreiben, das die Eingabeaufforderung verkürzt, wenn es zu lang wird. Das Setzen der PS1-Variablen in bash funktioniert gut. Wenn ich den gleichen Befehl direkt in einem Skript ausprobiere und es ausführe, passiert nichts.Bash-Prompt vorübergehend durch eigenes Skript ändern

#!/bin/bash 

PS1='\u:\W\$ ' 

Ich versuchte eval "PS1='\u:\W\$ '", export PS1='\u:\W\$ ' und exec PS1='\u:\W\$ ' ohne Ergebnis.

Wie kann ich das gleiche Ergebnis wie eine direkte Eingabe in der Bash erreichen?

Vielen Dank im Voraus

+0

BTW, könnten Sie eine Shell-Funktion anstelle eines Skripts dafür verwenden. –

+0

Das bedeutet eine Funktion zu ~/.profile oder ~/bashrc hinzufügen? – mremergo

+0

'~/.bashrc', nicht' ~/.profile' - der Bashrc wird für jede interaktive Shell ausgeführt, das Profil nur für Login-Shells (außer in einigen Betriebssystemen, die durch Löschen für Benutzer "einfacher" zu sein versuchen) der Unterschied, aber es ist schlechte Form, darauf zu zählen, auf einer von diesen zu sein), und reguläre Funktionen werden nicht von Kindprozessen geerbt, so dass Sie (im Gegensatz zu Umgebungsvariablen, die für '~/.profile' geeignet sind) nicht erhalten sie überall dort, wo sie gebraucht werden, außer sie befinden sich in '~/.bashrc'. –

Antwort

1

Im Allgemeinen in UNIX kann ein Prozess nur Variablen für sich und ihre Kinder ändern - nicht seine Eltern („Mutter“ ist der Prozess, der es aufgerufen).

Sie müssen source ein Skript, nicht ausführen, damit es in der Lage ist, die Variablen Ihrer interaktiven Shell zu beeinflussen. Dies führt alle Befehle innerhalb des Skripts innerhalb Ihrer aktuellen Shell aus, nicht eine neue Shell, die als untergeordneter Prozess gestartet wurde (deren Werte beim Beenden verworfen werden).

# in bash 
source yourscript 

# or in POSIX sh 
. yourscript # mind the space! 

In dieser Verwendung tut der Shebang nichts; In ähnlicher Weise wird auch die +x-Berechtigung nicht benötigt. Es ist auch typisch, Skripte zu benennen, die als Quelle gedacht sind und nicht mit einer Erweiterungszuordnung zu der Shell, für die sie bestimmt sind (yourscript.bash für bash, yourscript.sh für ein Skript, das von einer beliebigen POSIX-Shell bezogen werden kann) Ausgeführt werden sollte nicht als Quelle sollte keine Erweiterung haben.

Verwandte Themen