So passen Sie die Eingabeaufforderung an

Ich bin ein großer Fan des Terminals: Egal, ob Sie eine Handvoll Befehle (oder mehr!) Verwenden, um Ihren Entwicklungsprozess zu verbessern, oder einfach nur verwenden, um sich schnell durch Ihre Laufwerke zu bewegen und Dateien und Ordner zu öffnen, die Befehlszeile ist ein tolles Werkzeug. Wenn Sie es jedoch häufig verwenden, sollten Sie es an Ihre Bedürfnisse anpassen. Ich werde dir heute zeigen, wie das geht!

Ich werde oft gefragt: "Wie kam es, dass Ihre Eingabeaufforderung so aussah?" In diesem Tutorial zeige ich Ihnen genau, wie es geht. Es ist ziemlich einfach und erfordert nicht zu viel Zeit.

Ich sollte beachten, dass das, was ich Ihnen zeige, speziell für die Bash-Shell gilt. Dies ist die Standard-Shell auf Mac- und den meisten Linux-Systemen. Wenn Sie unter Windows eine Bash-Eingabeaufforderung wünschen, können Sie Cygwin überprüfen.


Wie funktioniert es?

Bevor wir beginnen, sprechen wir kurz darüber, wie Sie Ihre Bash-Eingabeaufforderung anpassen. Es ist nicht ganz dasselbe wie bei einer durchschnittlichen Anwendung: Es gibt keine Voreinstellungen. Ihre Anpassungen werden in einer Datei gespeichert. Wenn Sie mit Linux arbeiten (oder Cygwin verwenden), wird dies Ihr sein .bashrc Datei; auf dem Mac ist das dein .bash_profile Datei. In beiden Fällen wird diese Datei in Ihrem Basisverzeichnis gespeichert. Wenn Sie sich nicht sicher sind, wo sich das für eine Cygwin-Installation befindet, führen Sie den Befehl aus echo $ HOME). Beachten Sie, dass ich nur auf das verweisen werde .bashrc Datei von hier aus, aber verwenden Sie die .bash_profile wenn du auf einem Mac bist.

Beachten Sie, dass auf Macs (und möglicherweise Linux-Computern; ich bin mir nicht sicher) Dateien, die mit einem Punkt beginnen, standardmäßig ausgeblendet sind. Führen Sie diese beiden Zeilen im Terminal aus, um sie anzuzeigen

Standardwerte schreiben com.apple.finder AppleShowAllFiles TRUE Killall Finder

Also, was ist das? .bashrc Datei? Jede Zeile ist eigentlich ein Befehl, den Sie in der Befehlszeile ausführen können. In der Tat funktionieren diese Konfigurationsdateien: Wenn Sie die Konsole öffnen, werden alle Befehle ausgeführt, die Sie in der Konfigurationsdatei geschrieben haben, um Ihre Umgebung einzurichten. Wenn Sie also nur einige davon ausprobieren möchten, geben Sie sie einfach in die Befehlszeile ein. Die Einfachheit hier ist wunderschön.


Anpassen PS1

Beginnen wir mit einer Definition. Das Prompt Dies ist das, was Sie am Anfang der Zeile sehen, jedes Mal, wenn Sie die Eingabetaste in der Befehlszeile drücken. Hier sind die Standardeinstellungen für den Mac:

In diesem Fall lautet die Aufforderung Andrews-Macbook: ~ Screencast $. Hier gibt es einige Variablen: Andrew-Macbook ist der Name dieses Computers, ~ ist das aktuelle Verzeichnis (das Heimatverzeichnis) und Screencast ist der Benutzername. Lassen Sie uns dies ein wenig anpassen.

Öffne entweder deine .bashrc Datei. Wie wir festlegen, welche Informationen in der Eingabeaufforderung angezeigt werden, ist mit PS1 Variable. Fügen Sie dies der Datei hinzu:

PS1 = '->'

Beachten Sie, dass ich auf beiden Seiten des Gleichheitszeichens keine Leerzeichen einstelle. das ist nötig Speichern Sie diese Datei in Ihrem Basisverzeichnis und öffnen Sie ein Terminalfenster erneut. Nun sollten Sie eine Aufforderung haben, die so aussieht:

Ich stelle hier fest, dass Sie, wenn Sie es langweilig finden, Ihr Terminal jedes Mal schließen und wieder öffnen müssen, wenn Sie an Ihrem Terminal eine Änderung vornehmen .bashrc oder .bash_profile, Es gibt eine Abkürzung: Mit der können Sie jede Bash-Anpassungsdatei laden Quelle Befehl. Führen Sie dies in Ihrem Terminal aus:

source ~ / .bashrc

Noch zu lang? Nun, eine einzige Periode (.) ist ein Alias ​​für Quelle. Jetzt glücklich? Wenn Sie schnell sind, werden Sie feststellen, dass wir die verwenden können Quelle Befehl, um andere Dateien in unsere aufzunehmen .bashrc Datei, wenn Sie es aufteilen möchten, um die Kontrolle zu behalten.

Lassen Sie uns unsere Eingabeaufforderung noch etwas anpassen. Wir können integrierte Variablen in der Zeichenfolge verwenden, die wir zuweisen PS1 um hilfreiche Informationen in die Eingabeaufforderung aufzunehmen; hier ein paar nützliche:

  • \ d: Datum
  • \ h: Gastgeber
  • \ n: Neue Zeile
  • \ t: Zeit
  • \ u: Nutzername
  • \ W: Aktuelles Arbeitsverzeichnis
  • \ w: Vollständiger Pfad zum aktuellen Verzeichnis

Wenn Sie also Ihre Eingabeaufforderung so einstellen:

PS1 = '\ n \ W \ n [\ h] [\ u] ->'

Sie sollten so etwas sehen:

Beachten Sie hier ein paar Dinge: Erstens verwenden wir eine Reihe der oben gezeigten Variablen, um weitere Informationen zu erhalten. Zweitens fügen wir ein paar Zeilenumbrüche hinzu und erhalten eine interessantere Aufforderung: Wir haben das aktuelle Verzeichnis in einer Zeile und dann die eigentliche Aufforderung in der nächsten Zeile. Ich bevorzuge meine Eingabeaufforderung auf diese Weise, weil ich immer denselben Speicherplatz zum Schreiben meiner Befehle habe, unabhängig davon, wie lang der Pfad zum aktuellen Verzeichnis ist. Es gibt jedoch einen besseren Weg, dies zu tun, also lassen Sie uns das jetzt betrachten.


Anpassen PROMPT_COMMAND

Der bessere Weg, dies zu tun, ist die Verwendung der PROMPT_COMMAND Variable; Der Inhalt dieser Variablen ist nicht nur eine Zeichenfolge wie bei PS1. Es ist eigentlich ein Befehl, der ausgeführt wird, bevor die Eingabeaufforderung von bash angezeigt wird. Um dies zu versuchen, fügen wir dies zu unserem hinzu .bashrc:

PROMPT_COMMAND = 'echo' kommt vor der Aufforderung "'

Wir benutzen die Echo Kommando hier; Wenn Sie sich nicht damit auskennen, übergeben Sie einfach eine Zeichenfolge, und es wird auf das Terminal geschrieben. Für sich genommen ist es nicht besonders nützlich (obwohl Sie es verwenden können, um Variablen anzuzeigen: Echo $ PS1), aber es ist großartig, wenn es mit anderen Befehlen verwendet wird. Wenn Sie die Zeile oben hinzugefügt haben, sollten Sie Folgendes sehen:

Lassen Sie uns hier etwas nützlicheres tun. Schreiben wir eine Bash-Funktion, die wir zuweisen werden PROMPT_COMMAND. Versuche dies:

print_before_the_prompt () echo "kommt vor der Aufforderung" PROMPT_COMMAND = print_before_the_prompt

Wenn Sie dies verwenden, sollten Sie keinen Unterschied in Ihrer Eingabeaufforderung von dem, was wir oben haben, sehen. Jetzt machen wir das nützlich.

print_before_the_prompt () echo "$ USER: $ PWD" PROMPT_COMMAND = print_before_the_prompt PS1 = "->"

Folgendes erhalten Sie:

Das ist ein guter Anfang, aber ich möchte noch ein bisschen mehr machen. Ich werde das verwenden printf Befehl statt Echo weil es das Einfügen von Zeilenumbrüchen und Variablen erleichtert. Ein kurzer Hintergrund zum printf Befehl: Es werden mehrere Parameter benötigt. Der erste ist eine Art Vorlage für den String, der ausgegeben wird. Die anderen Parameter sind Werte, die gegebenenfalls in die Vorlagenzeichenfolge eingefügt werden. Wir werden sehen, wie das funktioniert.

Also lass uns das tun:

print_before_the_prompt () printf "\ n% s:% s \ n" "$ USER" "$ PWD"

Siehe die % s Teile da drin? Das heißt, den Wert für diesen Spot als String interpretieren; für den Kontext könnten wir auch verwenden % d um den Wert als Dezimalzahl zu formatieren. Wie Sie sehen können, haben wir zwei % ss in der? template? string und zwei weitere Parameter. Diese werden in die Zeichenfolge eingefügt, wo % ss sind. Beachten Sie auch die Zeilenumbrüche am Anfang und am Ende: Die erste gibt dem Terminal nur etwas Atempause. Die letzte stellt sicher, dass die Eingabeaufforderung (PS1) wird in der nächsten Zeile gedruckt und nicht in derselben Zeile wie PROMPT_COMMAND.

Sie sollten ein Terminal wie dieses bekommen:


Hinzufügen von Farbe

Gut aussehen! Aber gehen wir noch einen Schritt weiter. Lassen Sie uns etwas Farbe hinzufügen. Wir können einige spezielle Codes verwenden, um die Farbe des Texts im Terminal zu ändern. Es kann ziemlich entmutigend sein, den eigentlichen Code zu verwenden, daher kopiere ich gerne diese Liste der Variablen für die Farbe und füge sie oben in meine hinzu .bashrc Datei:

txtblk = '\ e [0; 30m' # Black - Regular txtred = "\ e [0; 31m" # red txtgrn = "\ e [0; 32m" # grün txtylw = "\ e [0; 33m" # gelb txtblu = "\ e [0; 34m" # Blue txtpur = "\ e [0; 35m" # Lila txtcyn = "\ e [0; 36m" # Cyan txtwht = "\ e [0; 37m" # Weiß bldblk = "\ e [1; 30m" # Schwarz - Fett bldred = "\ e [1; 31m" # Red bldgrn = "\ e [1; 32m # # Grün bldylw =" \ e [1; 33m # # Gelb bldblu = "\ e [1; 34m" # Blue bldpur = "\ e [1; 35m # # Lila bldcyn =" \ e [1; 36m # # Cyan bldwht = "\ e [1; 37m # # Weiß unkblk =" \ e [4; 30m "# Black - Unterstreichen undred =" \ e [4; 31m "# Red undgrn =" \ e [4; 32m "# Green undylw =" \ e [4; 33m "# Yellow undblu =" \ e [4; 34m "# Blue undpur =" \ e [4; 35m "# Purple undcyn =" \ e [4; 36m "# Cyan undwht =" \ e [4; 37m "# White bakblk =" \ e [ 40m "# Black - Hintergrund bakred =" \ e [41m "# Red badgrn =" \ e [42m "# Green bakylw =" \ e [43m "# Yellow bakblu =" \ e [44m "# Blue bakpur =" \ e [45m "# Purple bakcyn =" \ e [46m "# Cyan bakwht =" \ e [47m "# White txtrst =" \ e [0m "# Text zurücksetzen

Es gibt eine Methode für diesen Wahnsinn: Der erste Satz setzt auf normale Färbung. Der zweite Satz aktiviert die kräftigen Farben. Der dritte Satz wird unterstrichen dargestellt. Und dieser vierte Satz aktiviert die Hintergrundfarbe. Das letzte setzt die Farbgebung auf normal zurück. Also lasst uns diese verwenden!

print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s \ n $ txtrst" "$ USER" "$ PWD"

Hier habe ich hinzugefügt $ txtred vor dem ersten % s, und $ bldgrn vor dem zweiten % s; Am Ende habe ich die Textfarbe zurückgesetzt. Sie müssen dies tun, da, sobald Sie eine Farbe festgelegt haben, diese so lange gilt, bis Sie entweder eine neue Farbe verwenden oder die Färbung zurücksetzen. Sie werden auch feststellen, dass wir beim Festlegen einer Variablen kein Dollarzeichen voranstellen. Wir verwenden jedoch das Dollarzeichen, wenn Sie die Variable verwenden: So funktionieren Bash-Variablen. Dies gibt uns folgendes:

Fahren wir mit dem letzten Schritt fort: Fügen Sie Skript hinzu, um noch mehr Informationen zu erhalten.


Versionskontrollinformationen hinzufügen

Wenn Sie die Screencasts gesehen haben, die in meinem Buch Getting Good with Git enthalten sind, erinnern Sie sich möglicherweise daran, dass in meiner Eingabeaufforderung einige Informationen zur Versionskontrolle angezeigt werden. Ich habe diese Idee von dem ausgezeichneten PeepCode? Advanced Command Line? Screencast, der dies teilt, sowie viele andere tolle Tipps.

Dazu müssen wir das Skript herunterladen und erstellen, das diese Informationen findet. Besuchen Sie das Repository für vcprompt, ein Skript, das die Versionskontrollinformationen ausgibt. Wenn Sie mit dem Versionskontrollsystem von Mercurial vertraut sind, können Sie dies zum Abrufen des Repos verwenden, aber Sie möchten höchstwahrscheinlich den Zip-Link verwenden, um den Skriptcode als ZIP-Datei herunterzuladen. Sobald Sie es entpacken, müssen Sie das Skript erstellen. Um dies zu tun, einfach CD in den entpackten Skriptordner und führen Sie den Befehl aus machen. Sobald dieser Befehl ausgeführt wird, sollte im Ordner eine Datei mit dem Namen 'vcprompt' angezeigt werden. Dies ist das ausführbare Skript.

Wie verwenden wir dies in unserer Eingabeaufforderung? Nun, dies führt zu einem wichtigen Kaninchenpfad: Wie installieren wir? ein Skript (wie dieses), damit wir es im Terminal verwenden können? Alle Befehle, die Sie auf dem Terminal ausführen können, befinden sich in einem definierten Array von Ordnern. Dieses Array ist die PATH-Variable. Sie können eine Liste der Ordner anzeigen, die sich aktuell in Ihrem PFAD befinden, indem Sie ausführen echo $ PATH. Es könnte ungefähr so ​​aussehen:

/ usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin

Was wir tun müssen, ist das ausführbare Skript vcprompt in einem Ordner, der sich in unserem Pfad befindet. Was ich gerne mache (und ja, diesen Trick habe ich auch aus diesem PeepCode-Screencast gelernt), ist das Erstellen eines Ordners mit dem Namen 'bin' (kurz für 'binary') in meinem Home-Verzeichnis, und fügen Sie diesen Ordner meinem PATH hinzu. Fügen Sie dies Ihrem hinzu .bashrc:

export PATH = ~ / bin: $ PATH

Dies setzt PATH auf ~ / bin, plus was auch immer in der PATH-Variable war. Wenn wir das jetzt sagen vcprompt Skript in ~ / bin können wir es in einem beliebigen Ordner auf dem Terminal ausführen.

So, jetzt fügen wir dies unserer Eingabeaufforderung hinzu:

print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s $ txtpur% s \ n $ txtrst" "$ USER" "$ PWD" "$ (vcprompt)"

Ich habe hinzugefügt $ txtpur% s zur? Vorlage? string und fügte den vierten Parameter hinzu"$ (vcprompt)". Mit dem Dollarzeichen und Klammern wird das Skript ausgeführt und die Ausgabe zurückgegeben. Jetzt wirst du das bekommen:

Beachten Sie, dass nichts angezeigt wird, wenn der Ordner keine Versionskontrolle verwendet. Wenn wir uns jedoch in einem Repository befinden, erhalten wir das verwendete Versionskontrollsystem (in meinem Fall Git) und den Namen der Zweigstelle. Sie können diese Ausgabe ein wenig anpassen, wenn Sie möchten: Überprüfen Sie die heruntergeladene Readme-Datei mit dem Quellcode für die vcprompt Skript.


Weiter geht's!

Hier ist unser komplettes .bashrc oder .bash_profile Datei:

export PATH = ~ / bin: $ PATH txtblk = "\ e [0; 30m" # Black - Regular txtred = "\ e [0; 31m" # Red txtgrn = "\ e [0; 32m" # Green txtylw = " \ e [0; 33m "# Yellow txtblu =" \ e [0; 34m "# Blue txtpur =" \ e [0; 35m "# Purple txtcyn =" \ e [0; 36m "# Cyan txtwht =" \ e [0; 37m "# White bldblk =" \ e [1; 30m "# Black - Bold bldred =" \ e [1; 31m "# Red bldgrn =" \ e [1; 32m # # Green bldylw = "\ e [1; 33m # Yellow bldblu = "\ e [1; 34m # # Blue bldpur =" \ e [1; 35m # # Purple bldcyn = "\ e [1; 36m # # Cyan bldwht =" \ e [1 ; 37m "# White unkblk =" \ e [4; 30m "# Black - Unterstreichung undred =" \ e [4; 31m "# Red undgrn =" \ e [4; 32m "# Green undylw =" \ e [4 ; 33m # Yellow undblu = "\ e [4; 34m" # Blue undpur = "\ e [4; 35m # # Purple undcyn =" \ e [4; 36m # Cyan undwht = "\ e [4; 37m "# White bakblk =" \ e [40m "# Schwarz - Hintergrund bakred =" \ e [41m "# Red badgrn =" \ e [42m "# Grün bakylw =" \ e [43m "# Yellow bakblu =" \ e [44m "# Blue bakpur =" \ e [45m "# Purple bakcyn =" \ e [46m "# Cyan bakwht =" \ e [47m "# White txtrst =" \ e [0m "# Text zurücksetzen print_before_the_prompt ()  printf "\ n $ txtred% s: $ bldgrn% s $ txtpur% s \ n $ txtrst" "$ USER" "$ PWD" "$ (vcprompt) " PROMPT_COMMAND = print_before_the_prompt PS1 =" -> "

Nun, das ist ein Absturzkurs zum Anpassen der Bash-Eingabeaufforderung. Wenn Sie Fragen haben, stellen Sie sicher, dass Sie sie in den Kommentaren ablegen!