Bashs PS1 dazu bringen, den ursprünglichen Verzeichnisnamen und nicht den Symlink anzuzeigen?

825
Petruza

Ich habe derzeit PS1='\W'aber in einem symbolischen Link-Verzeichnis die Eingabeaufforderung den Namen des Symlinks. Wie kann ich PS1 so einrichten, dass der ursprüngliche Verzeichnisname angezeigt wird?

2

1 Antwort auf die Frage

4
Daniel Beck

Unter Linux können Sie Folgendes verwenden:

export PS1='$( readlink -f . )' 

Beispiel:

$ export PS1='$( readlink -f . ) \$ ' /home/danielbeck $ ln -s /etc foo /home/danielbeck $ cd foo /etc $ _ 

Beachten Sie, dass Sie immer noch /home/danielbeck/fooalles andere haben werden, z. B. das Auflösen von übergeordneten Verzeichnissen cd .., um das Beispiel fortzusetzen:

/etc $ cd .. /home/danielbeck $ _ 

Eine andere Option könnte darin bestehen, durch cdeine Funktion zu ersetzen, die anstelle des symbolischen Links in das kanonische Verzeichnis eintritt.

function cd { if [[ $# -ne 1 ]] ; then builtin cd "$@" elif [[ "$1" = "-" ]] ; then builtin cd - else builtin cd "$( readlink -f "$1" )" fi } 

Dies kann auch für alle cdArgumente funktionieren und unterstützt sogar CDPATH:

function cd { builtin cd "$@" builtin cd "$( readlink -f . )" }