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 cd
durch 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 cd
Argumente 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 PS1
in Ihrer ~/.bashrc
Datei bereits eine benutzerdefinierte Variable und möchten Ihre anderen Anpassungen beibehalten.
Kurz gesagt: Gehen Sie einfach hinein ~/.bashrc
, suchen Sie, wo PS1
die Variable definiert ist, und ersetzen Sie sie \w
durch $( readlink -f . )
.