Wie vermeide ich Tilde ~ in der Bash-Eingabeaufforderung?

12

Ich möchte die Tilde aus der Anzeige innerhalb der PS1-Variablen entfernen.

Meine aktuelle PS1-Zeichenfolge:

PS1="\h:\w\n$"

Und die Eingabeaufforderung sieht folgendermaßen aus:

lnx-hladky:/tmp/plugtmp
$

Mir gefällt nicht, dass das Verzeichnis $ HOME als Tilde angezeigt wird. Kann das vermieden werden?

Es verursacht Probleme, Beispiel:

lnx-hladky:~/DOC
$  

Die Dokumentation sagt:

\w : the current working directory, with $HOME abbreviated with a tilde 
\W: the basename of the current working directory, with $HOME abbreviated with a tilde

Gibt es eine Möglichkeit zu vermeiden, dass $ HOME mit einer Tilde abgekürzt wird?

Ich habe einen Weg gefunden, aber ich fühle mich überkompliziert:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

Kann jemand eine bessere Lösung vorschlagen? Ich habe das Gefühl, dass es nicht ganz in Ordnung ist, so viele Befehle auszuführen, nur um eine Eingabeaufforderung zu erhalten. (Datum, whoami, Hostname, pwd).

Jirka
quelle
Welche "Probleme" verursacht die Tilde im Beispiel?
JBallin

Antworten:

11

Bash führt Erweiterungen in der Eingabeaufforderung aus. Stellen Sie einfach sicher, dass Sie ihnen entkommen.

PS1='\h:$(pwd)\n$'
Ignacio Vazquez-Abrams
quelle
Das beantwortet meine Frage. Ich wusste nicht, dass es eine solche Möglichkeit gibt. Vielen Dank, Ignacio!
Jirka
2
@Jirka: Sie können auch Folgendes verwenden: `PS1 = '\ h: $ PWD \ n $'.
Bis auf weiteres angehalten.
1
Jirkas Lösung wird pwdbei jeder Eingabeaufforderung ausgeführt. Dennis 'Lösung holt nicht nur die Umgebungsvariable PWD, was viel billiger ist.
Stéphane Gourichon
2
pwdist eine eingebaute Bash. Die Behauptung, dass ${PWD}"viel billiger" ist als $(pwd)ohne Beweise.
Vineet
1
@anxieux: Sie müssen mit einfachen Anführungszeichen zitieren, nicht mit doppelten Anführungszeichen
weberjn
0

Sie müssen nicht so viele Befehle ausführen, wie Sie in Ihrem Beispiel gezeigt haben. bashbietet Verknüpfungen für die meisten der von Ihnen erwähnten Dinge.

Ihr Beispiel:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

kann umgeschrieben werden als:

PS1='\e[4;35m\t\e[24m\u@\h:\w\e[m\n'

Wo \tzeigt die Zeit (im 24-Stunden-Format), \uzeigt den aktuellen Benutzernamen, '\ h' zeigt den Hostnamen - die bashManpage beschreibt diese und die restlichen Escape-Zeichen, die für Ihre Eingabeaufforderung verfügbar sind .

Selbst wenn Sie den ~Pfad auf den vollständigen Pfad erweitern, wenn Sie nicht wissen, welcher Benutzer den Befehl ausführt und die Benutzer regelmäßig wechseln, können Sie Probleme mit Dateiberechtigungen oder ausführbaren Berechtigungen verursachen.

Doug Harris
quelle
Hallo, meine Absicht war es, \ w durch den vollständigen Pfad einschließlich des vollständigen $ HOME-Pfads zu ersetzen. Dank Ignacio verwende ich jetzt PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $', was mein Problem gelöst hat :-)
Jirka
Perfekt - ich mag es einzuschließen, \udamit ich weiß, wer ich bin. Vergessen Sie nicht, Ignacios Antwort zu akzeptieren - klicken Sie auf das Kontrollkästchen links neben der Frage.
Doug Harris
Danke für den Tipp. Ich bin neu in diesem Forum. Es ist ein großartiger Ort.
Jirka
\ u @ \ h: $ PWD (beachten Sie den Doppelpunkt) kann als Eingabe für scp
weberjn
0

Ich verwende die folgende Einstellung in meiner .bash_profile-Datei

$ export PS1='\e[1;34m\D{%T %d.%m.%Y} \[\033[00;39m\]\u\[\033[00;32m\]@$IP:\[\033[00;33m\]$(pwd)/\n\\$\[\033[00m\] '

21:40:08 14.12.2017 vmware@10.112.202.228:/home/vmware/Downloads/
Mohammad Shahid Siddiqui
quelle