feste Breite bash prompt
-
05-10-2019 - |
Frage
Ich möchte auf eine feste Breite meines Bash-Eingabeaufforderung setzen, und den Unterschied im Raum vor dem $ bilden, also, ob lang oder kurz, meint Prompt bleibt die gleiche Breite:
[name@host] ~/Directory/Dir...Another/LastDir $
[name@host] ~/Directory(branch) $
Derzeit wird in einem kurzen Verzeichnispfad meiner Prompt sieht etwa so aus:
[name@host] ~/Directory(branch) $
ein tiefer Verzeichnispfad sieht wie folgt aus:
[name@host] ~/Directory/Dir...Another/LastDir $
können Sie sehen, ich die PWD in der Mitte abgeschnitten habe, damit ich sehen kann, wo der Weg beginnt und wo es endet. Ich mag den Unterschied vor dem $ bilden.
Hier ist meine aktuelle Aufforderung:
# keep working directory to 30 chars, center tuncated
prompt_pwd() {
local pwd_symbol="..."
local pwd_length=30
newPWD="${PWD/#$HOME/~}"
[ ${#newPWD} -gt ${pwd_length} ] && newPWD=${newPWD:0:12}${pwd_symbol}${newPWD:${#newPWD}-15}
}
# set prompt
prompt_color() {
PROMPT_COMMAND='prompt_pwd;history -a;title_git'
PS1="${WHITEONMAGENTA}[\u@\h]${MAGENTA} \w\$(parse_git_branch) ${MAGENTABOLD}\$${PS_CLEAR} "
PS1=${PS1//\\w/\$\{newPWD\}}
PS2="${WHITEONTEAL}>${PS_CLEAR} "
}
Bei meiner Suche fand ich A Prompt die Breite der Zeit die einige fill tut, aber nicht, dass es für diese besondere Aufforderung arbeiten werden könnten.
Lösung
Wenn Ihr Weg ist zu kurz ([ ${#newPWD} -le ${pwd_length} ]
), können Sie printf (1), sie zu verlängern.
printf -v newPWD "%-*s" $pwd_length "$newPWD"
Dies wird links rechtfertigt die Zeichenfolge in $newPWD
mit einer Feldbreite von $pwd_length
.
printf (1) in bash eingebaut ist, so ist es nicht zu teuer jede Eingabeaufforderung ausgeführt werden.
Andere Tipps
Sie können die Umgebungsvariable BASH_COMMAND
gesetzt, die die Aufforderung manuell zu definieren. Sie können expand -t
verwenden, um es auf die gewünschte Länge zu erhalten.
Was ich getan habe, ist Position mein Verzeichnis und so oben meine Aufforderung, so habe ich keine Sorgen zu machen über sie:
myusername@mybox:/home/myusername/some/directory
$
Auf diese Weise kann ich auch den zusätzlichen Vorteil hat, kopieren Sie die Zeile oben für SCP und SSH-Befehle, ohne den Benutzer prepend @ host:. / Verzeichnis Beispiel
Hier ist mein $ PS1 Variable, sollten Sie es ausprobieren:
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$