Wenn ich '
im Terminal ein einfaches Anführungszeichen eingebe, wechselt es in einen anderen Modus, und Befehle werden nicht ausgeführt. Was ist dieser Modus und wann verwenden wir ihn?
root@sai:~# '
> ls
> '
ls
: command not found
root@sai:~#
command-line
bash
Manikanta
quelle
quelle
'
)Antworten:
Tatsächlich fordert die Shell einen vollständigen Befehl / Ausdruck an und zeigt aus diesem Grund die
PS2
Eingabeaufforderungszeichenfolge an.Von
man bash
:Und kurz davor:
Wie Sie vielleicht aus der Dokumentation ersehen können, haben Shells mehrere Eingabeaufforderungen mit unterschiedlichen Zwecken. Die
PS1
Eingabeaufforderung ist Ihreroot@sai:~#
Zeichenfolge, die normalerweise angezeigt wird , wenn Sie Befehle eingeben.>
ist diePS2
Eingabeaufforderung. Es gibt auch andere:PS3
zumselect
Befehlsblockieren undPS4
zum Debuggen mitset -x
Befehl. In diesem Fall interessieren wir uns mehrPS2
.Es gibt viele Möglichkeiten, wie die Shell die
PS2
Eingabeaufforderung anzeigen kann (und wo das Ausführen eines Befehls in einer neuen Zeile erforderlich sein kann). Dieselbe Eingabeaufforderung wird verwendet, wenn Sie einehere-doc
Umleitung durchführen (wobei ein Befehl als vollständig betrachtet wird, wenn in diesem Beispiel die Abschlusszeichenfolge angezeigt wirdEOF
):Sehr oft kann die Fortsetzung eines längeren Befehls durch Hinzufügen einer
\
sofortigen (!) Neuen Zeile erfolgen, wodurch dieselbe Eingabeaufforderung angezeigt wird:Wenn Pipes, Logikoperatoren oder spezielle Schlüsselwörter in der Befehlszeile vor newline angezeigt werden, wird der Befehl ebenfalls als unvollständig betrachtet, bis alle endgültigen Anweisungen eingegeben wurden:
In Ihrem speziellen Fall impliziert ein einfaches Anführungszeichen eine wörtliche Interpretation dessen, was sich zwischen den einzelnen Anführungszeichen befindet. Wie Zanna betonte, geben Sie also einen Befehl ein, der aus Zeilenumbruch +
ls
+ Zeilenumbruch besteht. Ein solcher ausführbarer Dateiname kann nicht gefunden werden (und normalerweise sollten Befehlsdateinamen nur aus alphanumerischen Zeichen sowie Unterstrichen, Bindestrichen und Punkten bestehen). Obwohl es tatsächlich möglich ist, Dateinamen zu enthalten, die Sonderzeichen enthalten, wird dies immer vermieden.HINWEIS : ein solches Verhalten wie in Ihrem Beispiel gezeigt ist spezifisch für Bourne-wie Muscheln, einschließlich
bash
,dash
(auf Ubuntu ist Symlink zu/bin/sh
),ksh
undmksh
.csh
und seine Derivate verhalten sich nicht so:csh
Wird im interaktiven Modus jedoch weiterhin?
als Eingabeaufforderung2 ausgelöst, wenn weitere Eingaben erforderlich sind:Siehe auch:
quelle
What's the difference between <<, <<< and < < in bash?
ist offline / falsch.Die Shell wartet nur auf das Schlusszitat. Wenn Sie es eingeben, wird es genau das tun, was es normalerweise tut, und versuchen, den eingegebenen Befehl auszuführen.
Anführungszeichen bewirken, dass die Shell keine Sonderzeichen interpretiert, was bedeutet, dass keine Erweiterungen durchgeführt werden. Einfache Anführungszeichen unterdrücken die Interpretation von Sonderzeichen vollständig. Normalerweise trennt eine neue Zeile Befehle, aber hier haben Sie die neuen Zeilen als Teil des Befehls eingefügt, indem Sie sie in Anführungszeichen setzen.
Da es keinen solchen Befehl gibt
<newline>ls<newline>
, wird er nicht gefunden.quelle