Warum werde ich im Terminal manchmal wiederholt mit ">" aufgefordert?

19

In Ordnung, wenn ich bestimmte Befehle falsch ausgeführt habe (falsch geschrieben usw.), gibt das Terminal Folgendes aus: >anstelle von computername:workingfolder username$und wenn ich die Eingabetaste drücke, sieht es folgendermaßen aus:

>

>

>

Das wäre, wenn ich dreimal die Eingabetaste drücken würde.

Anzeigename
quelle

Antworten:

43

> Dies ist die standardmäßige Eingabeaufforderung für die Fortsetzung. Dies wird angezeigt, wenn die zuvor eingegebenen Zeichen unausgeglichene Anführungszeichen aufweisen.

Geben Sie beispielsweise ein einfaches Anführungszeichen in die Befehlszeile ein, gefolgt von ein paar enterTasten:

$ '
> 
> 
> 

Die Fortsetzungsaufforderungen werden so lange angezeigt, bis Sie dazu aufgefordert werden

  • (a) Vervollständigen Sie den Befehl mit einem schließenden Anführungszeichen

    oder

  • (b) Geben Sie Ctrl+ ein D, um die Eingabe zu beenden. An diesem Punkt antwortet die Shell mit einer Fehlermeldung über die unausgeglichenen Anführungszeichen.

    oder

  • (c) Geben Sie Ctrl+ ein, um Cden von Ihnen eingegebenen Befehl abzubrechen.

Wie das nützlich ist

Manchmal möchten Sie möglicherweise eine Zeichenfolge eingeben, die eingebettete neue Zeilen enthält. Das können Sie wie folgt machen:

$ paragraph='first line
> second line
> third line
> end'

Wenn wir nun diese Shell-Variable anzeigen, können Sie sehen, dass die Eingabeaufforderungen verschwunden sind, die Zeilenumbrüche jedoch beibehalten werden:

$ echo "$paragraph"
first line
second line
third line
end
John1024
quelle
16

Das wird passieren, wenn Sie ein nicht geschlossenes Zitat in Ihrem Befehl haben. Das ist so etwas wie:

$ echo "test here
>
>
...

Sie können diesen Modus beenden, indem Sie das Zitat schließen (schreiben Sie ein "oder 'oder was auch immer Ihr offenes Zitat ist). Es kann sich auch um einen durch geschweifte Klammern getrennten Block, eine teilweise Vervollständigung for-dooder eine while-doSchleife oder um bestimmte andere Konstrukte handeln. Sie können auch drücken Ctrl-C, um diesen Befehl abzubrechen (und dann drücken Up, um ihn zu überarbeiten).

Dies kann manchmal ohne ein offensichtlich fehlendes Zitat geschehen, wenn Parameter- oder Verlaufserweiterungen auftreten, mit denen Sie nicht gerechnet haben.


Dies >ist Ihr PS2Wert ("sekundäre Eingabeaufforderung"). Sie können dies in etwas anderes ändern, um daran zu erinnern, was passiert ist:

PS2="Unclosed >"

in Ihrem .bashrcwird es Unclosed >stattdessen am Anfang jeder Zeile gedruckt .

Michael Homer
quelle
7

Zusätzlich zu den anderen Antworten erhalten Sie auch die Fortsetzungseingabeaufforderung, wenn Sie ein \als letztes Zeichen in einer Zeile eingeben.

Herr Lister
quelle
5
(Für mich geschieht dies normalerweise aus Versehen, da der Backslash der Eingabetaste erschreckend nahe kommt.)
Mr Lister,
Nicht auf meiner Tastatur .
TRiG
@TRiG Du meinst, du tippst oft aus Versehen # anstelle von \? Richtig ...
Mr Lister
7

Die Antwort liegt in dieser kryptischen Erwähnung im Bash Reference Manual :

5.1 Bourne-Shell-Variablen

[...]

  • PS1: Die primäre Eingabeaufforderungszeichenfolge. Der Standardwert ist ' \s-\v\$'. Eine vollständige Liste der zuvor erweiterten Escape-Sequenzen finden Sie unter Drucken einer EingabeaufforderungPS1 .
  • PS2: Die sekundäre Eingabeaufforderungszeichenfolge. Der Standardwert ist ' >'.

Gefolgt von :

6.3.3 Verhalten der interaktiven Shell

  1. Bash wird erweitert und angezeigt, PS1bevor die erste Zeile eines Befehls gelesen wird, und wird erweitert und angezeigt, PS2bevor die zweite und die folgenden Zeilen eines Befehls mit mehreren Zeilen gelesen werden.

Die >Eingabeaufforderung wird angezeigt, wenn Sie drücken Enterund Bash feststellt, dass der Befehl unvollständig ist. Das könnte sein, weil:

  • Das Zeichen vor der Neuen - Zeile ein \, das als behandelt Zu .
  • Sie haben eine unvollständige Zeichenfolge (nicht übereinstimmen Anführungszeichen oder ungekündigten hier-doc) oder einige andere nicht übereinstimmen Trennzeichen, wie $(), (), ``.
  • Sie haben eine Funktionsdefinition, eine forSchleife, eine whileSchleife oder a gestartet case.

Wenn Sie die sekundäre Eingabeaufforderung aufgrund eines ungewollten Tippfehlers sehen, drücken Sie ControlC, um zur primären Eingabeaufforderung zurückzukehren.

200_erfolg
quelle
Sie erhalten auch die sekundäre Eingabeaufforderung, wenn Sie ein Here-Doc eingeben. Es ist jedoch weniger wahrscheinlich, dass dies zufällig passiert als bei den anderen.
Barmar
6

Die Shell, die darauf wartet, dass Sie den Befehl ausführen. Möglicherweise gibt es irgendwo ein nicht geschlossenes Zitat oder Sie beginnen eine "for" -Schleife und warten, bis der Benutzer die Eingabe beendet hat

SidJ
quelle