Soll Bashs PS1 den ursprünglichen Verzeichnisnamen und nicht den symbolischen Link anzeigen?

Soll Bashs PS1 den ursprünglichen Verzeichnisnamen und nicht den symbolischen Link anzeigen?

Ich habe dies derzeit, PS1='\W'aber wenn ich mich in einem symbolisch verknüpften Verzeichnis befinde, zeigt die Eingabeaufforderung den Namen des symbolischen Links an. Wie kann ich PS1 dazu bringen, den ursprünglichen Verzeichnisnamen anzuzeigen?

Antwort1

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 für alles andere weiterhin Ausnahmen gelten /home/danielbeck/foo, z. B. das Auflösen von übergeordneten Verzeichnissen mit . cd ..Um das Beispiel fortzusetzen:

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

Eine andere Möglichkeit wäre, es cddurch eine Funktion zu ersetzen, die statt des symbolischen Links in das kanonische Verzeichnis eingibt, etwa so:

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

Dies könnte auch für alle cdArgumente funktionieren und unterstützt sogar CDPATH:

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

Antwort2

Um Leuten wie mir, die möchten, dass PS1 mit dereferenzierten Symlinks aufgelöst wird, ein wenig zu helfen, bearbeiten Sie .bashrc folgendermaßen:

if [ "$color_prompt" = yes ]; then
        PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]$(readlink -f \w)\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:$(readlink -f \w)\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
        PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: $(readlink -f .)\a\]$PS1"
    ;;
*)
    ;;
esac

Antwort3

Wahrscheinlich haben Sie PS1in Ihrer ~/.bashrcDatei bereits eine benutzerdefinierte Variable und möchten Ihre anderen Anpassungen beibehalten.

Kurz gesagt: Gehen Sie einfach hinein ~/.bashrc, suchen Sie, wo PS1die Variable definiert ist, und ersetzen Sie sie \wdurch $( readlink -f . ).

verwandte Informationen