Das Folgende verhält sich in Fedora und CentOS gleich.
cd mydirectory
funktioniert.
cd notadirectory
funktioniert (bekommt einen Fehler von Bash).
Jedoch,
cd `
gibt mir eine Art Aufforderung:
>
Nichts, woran ich gedacht habe, gibt eine Antwort, es geht nur zur nächsten Zeile, um erneut eine Aufforderung zu geben. Ich benutze einfach CTRL+ C, um zu meinem zurückzukehren root@localhost
.
Was ist der Zweck davon und was kann man damit machen?
Vielen Dank!
>
bezieht sich also mehr auf das als auf das Backtick, da dies auch in anderen Situationen vorkommen kannAntworten:
Was Sie eingegeben haben, ist ein Backtick. Dies ist der Beginn einer Anweisung, mit der die Bewertung Ihrer Eingabe als Befehl ausgelöst wird. Das
>
wird angezeigt, um anzuzeigen, dass Sie den Befehl in der nächsten Zeile noch eingeben.Wenn Sie das Backtick schließen, wird der gesamte Befehl ausgeführt. Z.B
quelle
cd `dirname \`which ls\``
= cd in das Verzeichnis, in dem sich die Binärdatei "ls" befindet. (dhcd /bin
da es ist/bin/ls
) [Bearbeiten: Puh, es ist hart, diesen Abschlag zu entkommen]$()
zu``
. Ihr Beispiel (plus das richtige Zitat) würdecd "$(dirname "$(which ls)")"
viel weniger verrückt werden.$()
einfache Anführungszeichen über.Die Antwort von JohnC erklärt bereits das Backtick. Aber worüber Sie sich auch wundern, ist die
>
Aufforderung. Dies ist eine Fortsetzungsaufforderung und wird nicht nur durch ein Backtick ausgelöst, sondern immer dann, wenn Ihre Shell eindeutig weiß, dass Sie noch keinen Befehl eingegeben haben . Am einfachsten ist es, eine explizite Zeilenfortsetzung\
am Ende einer Eingabezeile einzufügen (dies hilft, lange Eingaben aufzuteilen):Beachten Sie, dass Sie wie bei den
PS1
Steuerelementen für das Erscheinungsbild der Eingabeaufforderung auch festlegen könnenPS2
, dass die Fortsetzung der Eingabeaufforderung geändert werden soll, zEs gibt viele Gründe für die Fortsetzung. Ein einzelner Backtick ist unvollständig, aber Sie können auch so etwas eingeben
in einer einzigen Zeile (Randnotiz: Es wird empfohlen, stattdessen
$(
und zu)
verwenden, da die Klammern deutlich machen, wo die Erweiterung beginnt und endet, während einzelne Backticks es schwieriger machen, zu erkennen, wo sie fehlen. Und verschachteln ...). Andere mögliche Gründe für eine Fortsetzung der Aufforderung:done
nachwhile
oderfor
fi
nach einemif
esac
nachher fehltcase
(cd $HOME; cat .bashrc)
|
sowie eine bedingte Ausführung||
und&&
(nicht&
jedoch, da der Befehl nur im Hintergrund ausgeführt wird)'
oder"
)Seltsamerweise führt eine fehlende geschweifte Klammer
}
nach einer variablen Erweiterung${
auch zu einer Fortführungsaufforderung, die jedoch aufgrund des eingegebenen Leerzeichens fehlschlägt:quelle
Dies bedeutet, dass Ihr Befehl noch nicht vollständig ist. Tatsächlich wird das Zeichen-Backtick,
`
verwendet, um einen Inline-Befehl abzugrenzen.Beispiel:
quelle
Der Backtick startet / beendet die Befehlsersetzung. Die Shell liest den Befehl in den Backticks, interpretiert die Ergebnisse und fügt sie in den Befehl ein. Z.B:. ls
which cp
führt dazu, dass "which cp" ausgeführt wird und das Ergebnis dieses Befehls, dh / bin / cp, als Argument für den Befehl ls verwendet wird. Dieses Verhalten wird jedoch zugunsten der expliziteren und lesbareren $ (cmd) -Befehlsersetzung nicht mehr empfohlen.Bei der Eingabe von cd `Die Shell erwartet, dass ein Befehl ausgeführt wird, der folgt und mit einem Backtick abgeschlossen wird.
Bei der variablen Erweiterung mit geschweiften Klammern zeigt die Shell die Eingabeaufforderung für die Fortsetzung an, da diese Klammern vor der Erweiterung lexikalisch ausgewertet werden.
quelle