In einem System mit Ubuntu 14.04 und habe bash
ich die PS1
Variable mit folgendem Inhalt:
\u@\h:\w\$
so dass die Eingabeaufforderung als angezeigt wird
user@machinename:/home/mydirectory$
Manchmal hat das aktuelle Verzeichnis jedoch einen langen Namen, oder es befindet sich in Verzeichnissen mit langen Namen, so dass die Eingabeaufforderung wie folgt aussieht
user@machinename:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name$
Dies füllt die Zeile im Terminal und der Cursor springt zu einer anderen Zeile, was ärgerlich ist.
Ich möchte stattdessen etwas wie erhalten
user@machinename:/home/mydirectory1/...another_long_name$
Gibt es eine Möglichkeit, die PS1
Variable so zu definieren, dass der Verzeichnisname "umbrochen" und "komprimiert" wird, um niemals eine bestimmte Anzahl von Zeichen zu überschreiten und eine kürzere Eingabeaufforderung zu erhalten?
Antworten:
Zunächst einmal können Sie einfach ändern möchten das
\w
mit\W
. Auf diese Weise wird nur der Name des aktuellen Verzeichnisses und nicht der gesamte Pfad gedruckt:Dies ist möglicherweise immer noch nicht ausreichend, wenn der Verzeichnisname selbst zu lang ist. In diesem Fall können Sie die
PROMPT_COMMAND
Variable dafür verwenden. Dies ist eine spezielle Bash-Variable, deren Wert als Befehl ausgeführt wird, bevor jede Eingabeaufforderung angezeigt wird. Wenn Sie dies auf eine Funktion setzen, die die gewünschte Eingabeaufforderung basierend auf der Länge des aktuellen Verzeichnispfads festlegt, können Sie den gewünschten Effekt erzielen. Fügen Sie zum Beispiel diese Zeilen hinzu zu~/.bashrc
:Der Effekt sieht folgendermaßen aus:
quelle
Das Hinzufügen einer Zeichenrückgabe ist meine Hauptlösung dafür
Meine Eingabeaufforderung (die auch andere Dinge enthält, die sie noch länger machen) sieht also so aus:
Sie werden feststellen, dass das $ als neue Zeile zurückgegeben wird
Das schaffe ich mit
Beachten Sie, dass, obwohl in einer separaten Zeile, super lange Verzeichnisbäume wie
/home/durrantm/Dropbox/96_2013_archive/work/code/ruby__rails
verkürzt aufdh "top 3 directorys / _ / bottom two directorys", was mir normalerweise am Herzen liegt
Dadurch wird sichergestellt, dass die Zeile aufgrund der Verzeichnisbaumlänge nie zu lang wird. Wenn Sie immer den vollständigen Verzeichnisbaum haben möchten, passen Sie einfach LOCATION an, d. H
quelle
$
? (Siehe das .)Erstellt ~ / .bash_prompt:
In meinem ~ / .bash_profil hinzugefügt:
Ausgabe ist:
quelle
Keine Lösung, um lange Pfade zu verkürzen, sondern eine bequeme Möglichkeit, einen besseren Überblick zu erhalten, während alle Pfadinformationen sichtbar bleiben, besteht darin, vor dem letzten Zeichen eine neue Zeile einzufügen. Auf diese Weise beginnt der Cursor immer in der gleichen Spalte, auch wenn der Pfad lang genug ist, um ihn zu umbrechen, die Konsolenfenster jedoch so hoch sein sollten, dass die vorherigen Zeilen nicht zu schnell ausgeblendet werden. Ich habe die Farbcodes aus Gründen der Übersichtlichkeit entfernt:
quelle
Ich benutze dies, es wird um die Länge von in mehrere Zeilen und Einrückungen umgebrochen,
user@host
so dass davon ausgegangen wird , dass der StromPS1
effektiv "\u@\h:\w$
" ist. Der Pfad wird nicht gekürzt und an die aktuelle Terminalbreite angepasst. Es teilt nur den Pfad auf/
, so dass es nicht elegant mit wirklich langen Verzeichnissen umgeht (aber es bewahrt Leerzeichen für Auswahl / Kopieren). Es stellt sicher, dass immer mindestens 20 Zeichen für die Eingabe verfügbar sind.Dies funktioniert, indem Sie die Magie
\w
(nur\w$
für diese Übereinstimmungen ) herausnehmenPS1
und durch ersetzen und sie$PWD
dann als einfache Zeichenfolge einwickeln. Es wirdPS1
jedes Mal neu berechnet, wenn der ursprüngliche Wert in gespeichert_PS1
wird. Dies bedeutet, dass auch "unsichtbare" Escape-Zeichen beibehalten werden. Meine vollständige ursprüngliche Eingabeaufforderungszeichenfolge fürxterm
und die fett gedruckte Eingabeaufforderung:Und das Endergebnis ist ein Terminal mit 80 Spalten:
Dies funktioniert ab bash-3.2 so wie
printf -v var
es verwendet wird. Aufgrund der unterschiedlichen Komplexität ist eine Anpassung für andere Varianten von erforderlichPS1
.(Der Pfad in der xterm- Titelleiste wird weder umbrochen noch abgekürzt. Dies könnte geschehen, indem eine der anderen Antworten hier in die obige Funktion eingefügt wird.)
quelle
Alternativ kann ich in meinem .zshrc auf den ersten Buchstaben jedes Verzeichnisses abkürzen, wenn die Pixelbreite über einer bestimmten Breite liegt:
wird:
Hier ist die zsh-Funktion, um dies zu tun:
Ich verwende dies tatsächlich, um den Titel des Terminals zu aktualisieren, so dass ich bei mehreren Registerkarten immer sehen kann, welches Register welches ist. Die vollständige .zshrc-Datei dafür finden Sie hier .
Dies ist sehr praktisch, da es den Kontext beibehält und es Ihnen in zsh ermöglicht, schnell ein Verzeichnis im gleichen Format zu vervollständigen. (zB Tippen
cd /h/m/s/<tab>
wird automatisch vervollständigtcd /home/mydirectory1/second_directory
)quelle
Versuchen Sie es mit diesem Python-Skript . Es schneidet einzelne Abschnitte des Pfadnamens genau so ab, wie Sie es in Ihrer Frage wollten. Es wird auch die Unicode-Ellipse verwendet, die nur eine anstelle von drei Spalten einnimmt.
Beispielausgabe für Ihren Pfad (bei einem Limit von 30 Zeichen):
Es ist erwähnenswert, dass diese Lösung Unicode in Verzeichnisnamen mithilfe von korrekt verarbeitet
wcswidth
.${#PWD}
, die andere Antworten verwendet haben, werden die visuelle Breite eines Pfads, der UTF-8-Zeichen enthält, stark falsch einschätzen.quelle