Wie kann ich den absoluten Pfad in der Bash-Eingabeaufforderung anzeigen?


50

Ich habe momentan meine Bash PS1auf so etwas eingestellt:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ "

Wie kann ich dafür sorgen, dass der absolute Pfad anstelle des relativen Pfads angezeigt wird (z. B. /home/dave/diranstelle von ~/dir)?


1
/home/dave/dirund ~/dirsind beide absolute Pfade, der zweite verwendet eine Abkürzung für Ihr Home-Verzeichnis. Ein relativer Pfad ist ein Pfad, der relativ zu Ihrem aktuellen Verzeichnis ist (z. B. ../dir), anstatt mit root ( /) zu beginnen.
Doug Harris

3
ps Nizza Verwendung von Farbe, um den Exit-Status des vorherigen Befehls anzuzeigen. Wahrscheinlich die erste Verwendung von Farbe in einer Eingabeaufforderung, die mir gefallen hat.
Doug Harris

@Doug Harris: Danke für die Korrektur. Ich mag diese Färbung auch. Weiß nicht mehr, wo ich es zum ersten Mal gesehen habe (vielleicht in einem früheren SU-Beitrag?)
David B

\u@\H[\w]:~\$machtuser@host[~/path]:~$
JREAM

Antworten:


49

Einfach ersetzen \wdurch \$PWD:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "

Wie auch immer, wenn es Ihnen etwas ausmacht, würde ich Folgendes schreiben:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '

4
Auch daran habe ich gedacht, aber das $PWDwird zum Zeitpunkt der Zuordnung zu ausgewertet PS1, nicht bei jedem Anruf. Allerdings , wenn Sie das Dollarzeichen entkommen, wird es funktionieren - \$PWD. Damit ist das Dollarzeichen zum Zeitpunkt der Zuordnung ein Dollarzeichen und die Variablenauswertung erfolgt bei jeder Abfrage. +1 an Sie.
Doug Harris

Richtig, ich habe das verpasst, ich arbeite normalerweise mit einfachen Anführungszeichen, wenn es möglich ist. Vielen Dank.
CYRUS

+1 Danke! Könntest du bitte die Magie in deiner schönen Bash-Linie erklären (die "Spitze")?
David B

Sicher. Ich habe tput verwendet (siehe man tput für weitere Informationen), um die Farben zu ändern, anstatt die Steuerzeichen direkt zu schreiben, um die Lesbarkeit und Portabilität zu gewährleisten (?). Außerdem habe ich doppelte Anführungszeichen und umgekehrte Schrägstriche mit einfachen Anführungszeichen entfernt. Schließlich habe ich durch die Verwendung einer Variablen einige Redundanzen vermieden.
CYRUS


0

in bashs ps1; -W sollte relativ und -w absolut sein, also solltest du oben schon das Absolute haben ?!

http://wiki.archlinux.org/index.php/Color_Bash_Prompt


3
Ich glaube, Sie verwechseln absolute | relative mit full | current_dir. WZeigt nur den aktuellen Verzeichnisnamen an, wzeigt den vollständigen Pfad an, verwendet jedoch weiterhin relative Pfade.
David B

war die Terminologie in der URL, nicht meine :)
Sirex

0

Humm ~ / dir ist ein absoluter Pfad, der jedoch eine "Abkürzung" verwendet. Wenn Sie dies tun, cd /usr/localwird höchstwahrscheinlich der vollständige Pfad von / usr / local angezeigt. Du hast also sowieso schon einen vollen Pfad :-)

Aber wahrscheinlich ist Ihre richtige Frage, wie Sie den vollständigen Pfad ohne Verknüpfungen wie ~ anzeigen können?

Allerdings kenne ich keine Antwort darauf und wenn ich den Mann anschaue, scheint er eine zu haben (zumindest dokumentiert).


0

Führen Sie aus, pwdanstatt zu verwenden \W.

Einfache Version:

export PS1="\`pwd\` $ "

Verwenden Sie dies in Ihrem Code:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "

1
kleiner punkt: nach googles bash style guide lieber $ (pwd) als backticks, da bei backticks beim nesting ein escape erforderlich ist und $ () nicht.
Funroll
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.