it-swarm.com.de

"export PS1 =" zum Anpassen der Shell-Eingabeaufforderung

Ich wollte meine Shell-Eingabeaufforderung so anpassen, dass sie die Uhrzeit enthält. Also habe ich export PS1='\t\w\$' gemacht.

Meine Eingabeaufforderung sieht jetzt aus wie 18:57:37~$. Ich weiß nicht, wie ich [email protected] voranstellen soll.

Außerdem weiß ich nicht, wie ich die Farbe der einzelnen Parameter für \t, \w usw. ändern kann.

Wie kann ich nach all den Tests die Standardeinstellungen wiederherstellen?

Wohin geht die Exportlinie? Ich habe in den ~/.profile geschaut, aber da ist nicht die Zeile export PS1='\t\w\$'.

2
Smile

PS1 ist in Ihrem ~/.bashrc festgelegt. Diese Datei enthält Einstellungen, die in jeder interaktiven Shell angewendet werden. Eine interaktive Bash-Shell erhalten Sie, wenn Sie ein Terminal in Ubuntu öffnen, es sei denn, Sie haben für Ihren Benutzer eine andere Standard-Shell festgelegt.

In einer interaktiven Shell brauchen wir eine Eingabeaufforderung, und es ist schön, wenn die Eingabeaufforderung uns nützliche Informationen liefert, wie das aktuelle Arbeitsverzeichnis, den aktuellen Benutzer und den Hostnamen, wie dies Ubuntu PS1 tut.

Hier sind die Zeilen, in denen PS1 in der Standardversion von .bashrc für mein System festgelegt ist, /etc/skel/.bashrc

# uncomment for a colored Prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the Prompt
#force_color_Prompt=yes

if [ -n "$force_color_Prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_Prompt=yes
    else
        color_Prompt=
    fi
fi

if [ "$color_Prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '
fi
unset color_Prompt force_color_Prompt

An PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ ' können Sie erkennen, dass die Escape-Codes für username und hostname jeweils \u und \h sind

[email protected]:~$ PS1="\[email protected]\h"
[email protected]

Wenn Sie die Uhrzeit und das aktuelle Arbeitsverzeichnis hinzufügen möchten:

[email protected]="\[email protected]\h \t \w "
[email protected] 10:43:32 ~ 

Um Farben zu erhalten, müssen Sie die Farb-Escape-Sequenzen verwenden. Sie können einige in der Zuweisung color_Prompt in .bashrc sehen.

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Beispielsweise ist \033[01;34m blau:

PS1 assignment

Hoppla! Jetzt ist auch der nachfolgende Text blau ... ändern Sie ihn besser wieder in weiß:

PS1 with color reassignment

Wir sollten Farbzuweisungen mit eckigen Klammern umgeben, da Bash sonst den Eindruck hat, dass Zeichen der Eingabeaufforderung gedruckt werden, und sie zur Berechnung der Größe verwenden. Dies führt zu seltsamen Effekten, wenn Sie versuchen, mit Ihrem Verlauf zu interagieren. Hier ist die korrigierte Version:

PS1="\[\033[01;34m\]\[email protected]\h \t \w \[\033[00m\]"

Wenn Sie mit dem Spielen fertig sind, können Sie die Eingabeaufforderung auf die Standardeinstellung zurücksetzen, indem Sie das Terminal schließen und ein neues öffnen ;) oder indem Sie ausführen

source ~/.bashrc

my PS1 back to normal

Ich habe meinen PS1 so eingestellt, indem ich den Code aus .bashrc verwende, #force_color_Prompt=yes auskommentiere und die Farbcodes ändere. Hier sehen Sie die Zeilen, die ich geändert habe, um es einzustellen:

$ diff .bashrc /etc/skel/.bashrc 
46c46
< force_color_Prompt=yes
---
> #force_color_Prompt=yes
60c60
<     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;35m\]\w\$\[\033[00m\] '
---
>     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

(danach wurden weitere Zeilen geändert, diese sind jedoch nicht relevant)

Sie können dasselbe tun, aber beispielsweise irgendwo einen \t in die color_Prompt-Zeile einfügen

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h \[033[01;36m\]\t \[\033[00m\]:\[\033[01;35m\]\w\$\[\033[00m\] '

Eine Liste der ANSI-Escape-Codes für Farben und mehr finden Sie unter diese Anleitung zum Anpassen der Eingabeaufforderung .


Ich habe es versäumt, den letzten Teil Ihrer Frage zu beantworten.

Wohin geht die Exportlinie? Ich habe in ~/.profile gesucht, aber es gibt keinen Zeilenexport PS1='\t\w\$'

Ich bin nicht sicher, ob Sie erwartet haben, dass export VAR=val dazu führen würde, dass Ihr ~/.profile automatisch geändert wird. Der Befehl export führt dies niemals aus. Beim Exportieren einer Variablen wird diese nur an die Umgebung von Befehlen übergeben, die von der aktuellen Shell ausgeführt werden. Wenn Sie die Shell beenden (und alle untergeordneten Prozesse beendet wurden), ist alles, was Sie aus der Shell exportiert haben, verschwunden.

Wenn Sie eine Umgebungsvariable dauerhaft festlegen möchten, müssen Sie sie im Allgemeinen explizit zu ~/.profile hinzufügen. Einige Skripts, mit denen Sie möglicherweise Software installieren, können Ihren ~/.profile oder andere Shell-Konfigurationsdateien ändern.

PS1 muss jedoch nicht in die Umgebung exportiert werden. Zu Beginn meiner Antwort sagte ich, dass wir in einer interaktiven Shell eine Eingabeaufforderung benötigen, und ich meinte, dass nur interaktive Shells Eingabeaufforderungen benötigen (weil die Eingabeaufforderung hilft der Benutzer interagiert mit der Shell). Kein anderer Befehl benötigt PS1.

Möglicherweise denken Sie, dass es nützlich sein könnte, PS1 an alle untergeordneten Shells der aktuellen Shell zu übergeben. Wenn Sie eine interaktive Shell in einer Shell durch Ausführen von bash starten, übernimmt die neue Shell nicht die Shell-Variablen der aufrufenden Shell. nur seine Umgebungsvariablen. Um also Variablen an eine untergeordnete Shell zu übergeben, sollten wir sie export.

Beim Exportieren von PS1 * wird der Wert jedoch normalerweise nicht an eine untergeordnete Shell übergeben, da er durch die Konfigurationsdateien der Shell, /etc/bash.bashrc und ~/.bashrc, zurückgesetzt wird. Daher ist das Schließen des Terminals (wie ich bereits angedeutet habe) nicht erforderlich. Selbst wenn Sie bash ausführen, wird Ihre Eingabeaufforderung in die übliche Form zurückgesetzt:

[email protected]:~$ export PS1='\t -> '
22:43:54 -> bash
[email protected]:~$ 

(wenn Sie exit diese Shell, kommt die bearbeitete Eingabeaufforderung zurück)

* Ich sage normalerweise, weil, obwohl nicht interaktive Shells immer PS1 nicht setzen, eine interaktive Bash-Shell den Wert von PS1 beibehält, wenn sie gesetzt ist. Dies ist nicht offensichtlich, da es, wie im vorherigen Beispiel gezeigt, normalerweise von den Konfigurationsdateien zurückgesetzt wird. Wir können es aufdecken, indem wir PS1 ändern und dann eine neue Shell starten, die unsere Konfigurationsdateien nicht liest:

[email protected]:~$ export PS1='\t -> '
22:55:04 -> bash --norc
22:55:09 -> 

Zusammenfassend ist festzuhalten, dass es in PS1 keine export -Zeile für ~/.profile gibt, da PS1 keine Umgebungsvariable ist und keine solche ist, da es nur für interaktive Shells erforderlich ist und aus dem Grund, dass interaktive Shells PS1 erforderlich sind wird in ~/.bashrc festgelegt, da alle interaktiven Bash-Shells source~/.bashrc, sofern nicht anders angegeben, so dass ~/.bashrc nicht exportPS1 sein muss, um von untergeordneten Shells geerbt zu werden (aber wenn Sie wirklich wollen export Ein anderer Wert von PS1 als der in Ihrem .bashrc für eine untergeordnete Shell. Sie können dies tun, indem Sie verhindern, dass diese Shell .bashrc bezieht.).


Ich konnte meine Antwort dank Eliah Kagan erweitern, der erklärte, wie Bash PS1 behandelt hier im Chat und ausführlicher in diese Antwort .

6
Zanna