Fügen Sie eine leere Zeile zwischen den Eingabeaufforderungen ein

8

Wenn Sie die Befehlszeile verwenden, wird es oft sehr unübersichtlich. Dies macht es unpraktisch, beispielsweise frühere Befehle und deren Ausgaben zu untersuchen.

Ich möchte jedes Mal eine neue Zeile hinzufügen, bevor die Eingabeaufforderung angezeigt wird. Wie so:

<clutter>
<blank line>
name@machine:~$

Ich benutze die Bash-Shell. Wie kann dies erreicht werden?

Faultiere
quelle
1
Ich bevorzuge dies: lifehacker.com/5840450/…
Maerlyn

Antworten:

21

Eine Möglichkeit, dies zu erreichen, besteht darin, die .bashrcDatei zu ändern . Platzieren Sie einfach Folgendes am Ende der .bashrcDatei.

PS1="\n$PS1"

Um zu erklären, wie dies funktioniert, enthält PS1die Variable, was als Eingabeaufforderung angezeigt werden soll. Alles, was dies sagt, ist " PS1auf den vorherigen Inhalt von gesetzt PS1, mit einem vorangestellten Zeilenumbruchzeichen". Wenn Sie es in die .bashrcmeisten Distributionen einfügen, wird es von bash jedes Mal ausgeführt, wenn Sie eine interaktive Shell öffnen (aber keine Login-Shell - siehe Unterschied zwischen Login-Shell und Nicht-Login-Shell? ).

Faultiere
quelle
2
Um zu erklären, wie dies funktioniert, ist PS1 die Variable, die enthält, was als Eingabeaufforderung angezeigt werden soll. Alles, was dies bedeutet, ist "PS1 auf den vorherigen Inhalt von PS1 setzen, wobei ein Zeilenumbruch vorangestellt wird".
Muzer
@ Muzer Vielleicht könnte Ihr Kommentar eine Bearbeitung sein
rpax
@rpax gute Idee, eingereicht. Ein bisschen über .bashrc selbst hinzugefügt.
Muzer
Befriedigend ist, dass die Ausführung PS1="\n$PS1"in einem Terminal sofortige Wirkung hat :)
mwfearnley
Funktioniert einwandfrei, außer dass nach dem Eingeben clear(oder Drücken Ctrl+l) die erste angezeigte Zeile eine leere Zeile ist. Für einige mag es ein kleines Detail sein, aber ich würde es vorziehen, wenn die erste Zeile die Eingabeaufforderung ist.
Robert Kusznier
6

Sie können PROMPT_COMMAND verwenden :

PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"

oder:

PROMPT_COMMAND="echo;$PROMPT_COMMAND"
cuonglm
quelle
2
Sollte der erste sein PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"? In seiner jetzigen Form scheint es nichts zu tun, wenn ich es in die .bashrcDatei lege.
Slothworks
@ Slothworks: Ja, natürlich hat meine falsche Eingabe das Problem behoben.
Cuonglm
Mehr als eine Möglichkeit, dies tatsächlich zu tun :) Vielen Dank für Ihre Antwort.
Slothworks
2
Die Alternative von Slothworks ist besser, da Ihre nach jedem Befehl, der in der Befehlszeile ausgeführt wird, einen zusätzlichen Befehl ausführt. printfund echosind natürlich sehr leicht, aber es macht immer noch keinen Sinn zu verwenden, PROMPT_COMMANDwann PS1die Arbeit erledigt wird.
Mikkel
Hinweis: Wenn Sie etwas in den Befehl einfügen möchten, das sich bei jeder Ausführung der Eingabeaufforderung geändert hat, möchten Sie PROMPT_COMMAND und nicht PS1. Dies wird üblicherweise mit git verwendet, um anzuzeigen, welcher Zweig des Repos aktiv ist. Google für PROMPT_COMMAND Vorschläge, um zu sehen, was getan werden kann.
Walter
4

Alternative: Hinterlassen Sie eine Zeile in der PS1=Eingabeaufforderung Ihres .bashrc. Hier ist buchstäblich, wie ich mich .bashrcauf jedem Linux-Rechner einrichte, den ich habe:

PS1=' 
serg@ubuntu [$(pwd)]
================================
$ '

Wie Sie in meinem obigen Beispiel sehen, ist der Benutzername in der Eingabeaufforderung fest codiert. Sie können natürlich Escape-Sequenzen verwenden, die bash oder eine andere Shell (z. B. ksh ) bereitstellt. Eine etwas neutralere Option wäre jedoch die Verwendung der Parametersubstitution durch Befehle wie whoami(Geben Sie Ihren Benutzernamen an) und hostname(offensichtlich wird der Hostname gemeldet ). Zum Beispiel:

PS1='
$(whoami)@$(hostname):$(pwd)
$ '

Weitere lustige Dinge mit der Eingabeaufforderung .bashrcund Parametererweiterungen finden Sie in meinen Antworten hier:

Wie überprüfe ich den Batteriestatus mit dem Terminal?

Wie kann ich meine Terminals / Shells dazu bringen, kundenspezifische Designs zu erhalten? und

Wie wird eine laufende Uhr im Terminal vor der Eingabeaufforderung angezeigt?

Sergiy Kolodyazhnyy
quelle
Warum sind der Benutzername und der Computername fest codiert? Wäre schön, wenn sie parametrisiert
wären
@rpax mein tatsächlicher Benutzername ist anders. Das ist mein Name, den Sie in der Eingabeaufforderung sehen. Maschinenname ist auch anders.
Sergiy Kolodyazhnyy
Ich meinte eine Art von $(whoami)stattusernamehardcoded
rpax
@rpax oh, das kann man auch machen. Ich werde das in meine Antwort aufnehmen
Sergiy Kolodyazhnyy
4
Beachten Sie, dass Sie \uund \hfür Ihren Benutzernamen bzw. Hostnamen verwenden können. Sie können mehr Sonderzeichen (zum Beispiel die aktuelle Zeit in verschiedenen Formaten) hier sehen
Yossarian