PS1 in einem script ändern [GELÖST !!!]
-
- Beiträge: 3
- Registriert: 15.08.2016 18:27:55
PS1 in einem script ändern [GELÖST !!!]
Ich würde gerne (ein) script(e) schreiben mit dessen (deren) Hilfe ich die Variable PS1 jederzeit ändern kann.
Bisher bin ich wie folgt vorgegangen:
_________________
> export PS1
_________________
der Inhalt meines test scripts mit dem Namen: ".prompt1" ist:
__________________________
#!/bin/bash
echo user=$USER
echo path=$PATH
echo PS1=$PS1
echo PS2=$PS2
PS1='\u > '
echo $PS1
____________________________
Wenn ich das script ausführe mit:
__________________________
> ./.prompt1
__________________________
erhalte ich:
___________________________
user=root
path=/user/local/ ...
PS1=
PS2=
\u >
>
___________________________
d.h. die Umgebungs Variablen PS1 und PS2 werden in keiner Richtung weitergegeben.
Ich suche schon 2 Tage, habe aber nichts brauchbares gefunden.
Über Eure hilfe würde ich mich sehr freuen !!!
Schon mal vielen Dank im Voraus
Bisher bin ich wie folgt vorgegangen:
_________________
> export PS1
_________________
der Inhalt meines test scripts mit dem Namen: ".prompt1" ist:
__________________________
#!/bin/bash
echo user=$USER
echo path=$PATH
echo PS1=$PS1
echo PS2=$PS2
PS1='\u > '
echo $PS1
____________________________
Wenn ich das script ausführe mit:
__________________________
> ./.prompt1
__________________________
erhalte ich:
___________________________
user=root
path=/user/local/ ...
PS1=
PS2=
\u >
>
___________________________
d.h. die Umgebungs Variablen PS1 und PS2 werden in keiner Richtung weitergegeben.
Ich suche schon 2 Tage, habe aber nichts brauchbares gefunden.
Über Eure hilfe würde ich mich sehr freuen !!!
Schon mal vielen Dank im Voraus
Zuletzt geändert von linuxgreenhorn am 16.08.2016 09:21:50, insgesamt 1-mal geändert.
Re: PS1 in einem script ändern
In das Skript rein wird das wohl interaktiv sein müssen. Also entweder starten mit bash -i .prompt1 oder einfacher mit der Shebang #!/bin/bash -i. Aus dem Skript heraus muss auf jeden Fall exportiert werden, wobei das aber keine Lösung für die aktuelle Shell ist und möglicherweise beim Einlesen der Konfigurationsdateien einer neuen Shell auch gar keine Wirkung zeigt!? Alternativ (für rein ins Skript und in der aktuellen Shell) könntest du das Skript, so wie ist, auch einfach sourcen (Aufruf mit . .prompt1 bzw. source .prompt1).linuxgreenhorn hat geschrieben:d.h. die Umgebungs Variablen PS1 und PS2 werden in keiner Richtung weitergegeben.
Re: PS1 in einem script ändern
Ein Verdacht ist, daß beim Aufruf eines externen Skriptes die Umgebungsvariablen von bash neu gesetzt werden, so daß Dein eigener Eintrag überschrieben wird.
Hast Du mal versucht:
export myPS1="Mein Prompt"
und im aufgerufenen Skript:
echo $myPS1
PS1=$myPS1
echo $PS1
Hast Du mal versucht:
export myPS1="Mein Prompt"
und im aufgerufenen Skript:
echo $myPS1
PS1=$myPS1
echo $PS1
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.
-
- Beiträge: 3
- Registriert: 15.08.2016 18:27:55
Re: PS1 in einem script ändern
Hallo tobo, hallo MartinV,
erst mal vielen Dank für Eure Antworten.
tobo:
hab's gleich voller Hoffung ausprobiert.
#!/bin/bash -i hat keinen Effekt auf die Übernahme der Variablen PS1 in das script.
auch der Aufruf mit:
_______________
> . .prompt1
_______________
hat nur den Effekt dass ich mich neu anmelden muss. Leider.
MartinV:
hab' ich schon vorher ausprobiert mit ps1 (statt myPS1)
Wenn ich ps1 vor dem Start des scripts exportiere:
_______________
> export ps1
_______________
wird ps1 in das script übernommen. Auch PS1=$ps1 funktioniert (im script).
Aber PS1 wird nicht in die aufrufende bash übernommen. PS1 bleibt also unverändert.
Ich verstehe das Ganze nicht denn:
in der Datei /etc/bash.bashrc
steht neben vielem Anderen:
______________________________________________
.
.
...
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
...
.
.
______________________________________________
... und das ist schliesslich auch nur ein script.
Nochmals vielen Dank
vielleicht weiss noch jemand was ???
erst mal vielen Dank für Eure Antworten.
tobo:
hab's gleich voller Hoffung ausprobiert.
#!/bin/bash -i hat keinen Effekt auf die Übernahme der Variablen PS1 in das script.
auch der Aufruf mit:
_______________
> . .prompt1
_______________
hat nur den Effekt dass ich mich neu anmelden muss. Leider.
MartinV:
hab' ich schon vorher ausprobiert mit ps1 (statt myPS1)
Wenn ich ps1 vor dem Start des scripts exportiere:
_______________
> export ps1
_______________
wird ps1 in das script übernommen. Auch PS1=$ps1 funktioniert (im script).
Aber PS1 wird nicht in die aufrufende bash übernommen. PS1 bleibt also unverändert.
Ich verstehe das Ganze nicht denn:
in der Datei /etc/bash.bashrc
steht neben vielem Anderen:
______________________________________________
.
.
...
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
...
.
.
______________________________________________
... und das ist schliesslich auch nur ein script.
Nochmals vielen Dank
vielleicht weiss noch jemand was ???
Re: PS1 in einem script ändern
Code: Alles auswählen
Wenn ich ps1 vor dem Start des scripts exportiere:
_______________
> export ps1
_______________
wird ps1 in das script übernommen. Auch PS1=$ps1 funktioniert (im script).
Aber PS1 wird nicht in die aufrufende bash übernommen. PS1 bleibt also unverändert
Schau mal in 'man bash' nach den Optionen --norc --noprofile und --rcfile
Code: Alles auswählen
Aber PS1 wird nicht in die aufrufende bash übernommen. PS1 bleibt also unverändert.
Du kannst aber die bash als child Prozeß innerhalb des Skriptes starten:
Code: Alles auswählen
#! /bin/bash
export PS1=myprompt
bash --norc --noprofile
Ich glaube, Du hast tobos zweiten Vorschlag gar nicht bemerkt, funktioniert einwandfrei. In einem Skript PS1 definieren und in bash einbinden mittobo hat geschrieben:Alternativ (für rein ins Skript und in der aktuellen Shell) könntest du das Skript, so wie ist, auch einfach sourcen (Aufruf mit . .prompt1 bzw. source .prompt1).
Code: Alles auswählen
source promptscript
Code: Alles auswählen
. promptscript
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.
Re: PS1 in einem script ändern
Der Prompt wird in folgenden Dateien gesetzt:MartinV hat geschrieben:Damit bestätigt sich mein Verdacht: Die Umgebungsvariablen werden überschrieben.
/etc/profile
/etc/bash.bashrc
~/.profile
~/.bashrc
In welcher Reihenfolge diese abgearbeitet werden, weiß ich gerade nicht auswendig, die in /etc kommen aber zuerst dran, dann die in ~
Wenn das also per Skript erfolgen soll, muß man dieses einfach als letztes ausführen, so daß eventuell vorher gesetzte Werte überschrieben werden. Man kann aber auch einfach die eigenen .profile oder .bashrc editieren, dafür sind sie schließlich da.
-
- Beiträge: 3
- Registriert: 15.08.2016 18:27:55
Re: PS1 in einem script ändern [GELÖST !!!]
Vielen Dank für Eure Mühe !!!
Der Vorschlag von tobo:
_____________________
> . ./.prompt1
_____________________
war des Rätsels Lösung
Danke tobo
aber:
vom vielen experimentieren war ganz am Ende meines scripts (nach mehreren Leerzeilen)
ein exit versteckt, dass ich immer übersehen habe.
deshalb hat der Aufruf:
_____________________
> . ./.prompt1
_____________________
dazu geführt dass ich mich neu anmelden musste.
Jetzt läuft's wie gewünscht.
Nochmals vielen Dank.
Der Vorschlag von tobo:
_____________________
> . ./.prompt1
_____________________
war des Rätsels Lösung
Danke tobo
aber:
vom vielen experimentieren war ganz am Ende meines scripts (nach mehreren Leerzeilen)
ein exit versteckt, dass ich immer übersehen habe.
deshalb hat der Aufruf:
_____________________
> . ./.prompt1
_____________________
dazu geführt dass ich mich neu anmelden musste.
Jetzt läuft's wie gewünscht.
Nochmals vielen Dank.