Ich habe dieses benutzerdefinierte .profile
Skript:
PS1='\[\033]0;WSL2 Bash\W\007\]' # set window title
PS1="$PS1"'\n' # new line
PS1="$PS1"'\[\033[36m\]' # change to green
PS1="$PS1"'bash@bexgboost ' # user@host<space>
PS1="$PS1"'\[\033[31m\]' # change to brownish yellow
PS1="$PS1"'\W' # current working directory
if test -z "$WINELOADERNOEXEC"
then
GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
if test -f "$COMPLETION_PATH/git-prompt.sh"
then
. "$COMPLETION_PATH/git-completion.bash"
. "$COMPLETION_PATH/git-prompt.sh"
PS1="$PS1"'\[\033[35m\]' # change color to cyan
PS1="$PS1"'`__git_ps1`' # bash function
fi
fi
PS1="$PS1"'\[\033[0m\]' # change color
PS1="$PS1"'\n' # new line
PS1="$PS1"'$ ' # prompt: always $
Aktuell sieht es so aus wenn ich das Terminal starte:
Das Skript sollte den Zweignamen folgendermaßen anzeigen:
Ignorieren Sie die Nichtübereinstimmung in den Verzeichnisnamen.
Was mache ich falsch?
Antwort1
Das Problem in Ihrem Code liegt in Zeile 18:
PS1="$PS1"'`__git_ps1`' # bash function
Hier verwenden Sie Befehlssubstitution (altes Modell mit Backticks), bei der Sie die Funktion aufrufen __git_ps1
und diese durch ihre Ausgabe ersetzt werden soll, aber ich kann die Definition der Funktion in Ihrem Beispielcode nicht sehen. Ich denke also, Sie können die folgende Funktionsdefinition irgendwo vor dieser Zeile hinzufügen:
__git_ps1() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
Speichern Sie dann die Profildatei und geben Sie sie als Quelle ein - . .profile
, dann sollte es funktionieren.
Darüber hinaus finden Sie hier ein funktionierendes Beispiel, in dem die Standarddatei ~/.bashrc
(in diesem Fall bearbeite ich diese Datei lieber .profile
) von Ubuntu Server 22.04 geändert wird, um fast dasselbe Aussehen zu erzielen, wie Sie es sich wünschen. Beachten Sie, dass ich hier die neue Syntax der Befehlssubstitution verwende $()
. Und die Funktion parse_git_branch()
wird vor ihrem Aufruf definiert.
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
if [ "$color_prompt" = yes ]; then
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # green
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;33m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # yellow
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # blue
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # purple
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # red
PS1="${PS1}\[\033[01;33m\]\$(parse_git_branch)\[\033[0m\]\n" # HERE WE CALL THE FUNCTION THAT PARSE THE BRANCH
PS1="${PS1}\$ "
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
Es werden nur die relevanten Zeilen von .bashrc
angezeigt. Den Standardzustand finden Sie if [ "$color_prompt" = yes ];
in Ihrer Anweisung (ungefähr Zeile 70) .bashrc
.
So sieht es in der Praxis aus:
- Beachten Sie, dass ich das GNOME-Terminal innerhalb von Kali Linux verwende, um eine Verbindung zum Ubuntu-Server herzustellen. Aus diesem Grund unterscheiden sich die Farben geringfügig von denen, die vom gleichen Code unter Ubuntu erzeugt werden.
Verweise:
- Fragen Sie Ubuntu:Skript zum Anzeigen aller Terminalfarben
- Codewand:Fügen Sie der Bash-Eingabeaufforderung den Git-Zweignamen hinzu