cd -
kann zwischen aktuellem und vorherigem Verzeichnis wechseln.
Es sieht so aus -
, als hätte ich schon andere Befehle als Argumente verwendet, obwohl ich mich nicht mehr erinnere, ob -
dies dasselbe bedeutet wie mit cd
.
Ich fand, dass -
das nicht funktioniert ls
.
Wird -
nur mit CD verwendet?
cd
es sich um einen eingebauten Befehl handelt, nicht um einen externen Befehl (und auch nicht um einen einzigen Befehl).cd -
ist also ein Shell-Level-Feature.git checkout -
, um zum vorherigen Zweig zu wechseln-
sie mit anderen eingebauten auf die gleiche Weise verwendet?pushd
ja. Andernfalls ist die Bedeutung des "vorherigen Verzeichnisses" kein besonders nützlicher Standard.Antworten:
Die Syntaxrichtlinien für POSIX-Dienstprogramme (insbesondere Nr. 13) geben an, dass für Dienstprogramme, von denen ein Dateiname gelesen werden soll,
-
die Standardeingabe und für Dienstprogramme, in die ein Dateiname geschrieben werden soll,-
die Standardausgabe gilt. Kopiert beispielsweisecat somefile -
den Inhalt vonsomefile
auf seine Standardausgabe, gefolgt von dem, was er auf seiner Standardeingabe liest.Diese Richtlinie gilt nicht für den
cd
Befehl, da keine Datei gelesen oder in eine Datei geschrieben wird.cd
macht etwas anderes: das Argument-
bedeutet "das vorherige Verzeichnis". Der Befehlcd -
ist äquivalent zucd "$OLDPWD" && pwd
. Dieses Verhalten ist spezifisch für dencd
Befehl und für direkt inspirierte Befehle wiepushd
.Beachten Sie, dass dies
-
ein Operand und keine Option ist. Nur Argumente, die mit-
und beginnen, sind nicht gerecht-
oder--
Optionen. Die Hauptaussage, ein Operand zu sein, ist, dass--
seine spezielle Bedeutung nicht beeinflusst wird. Zum Beispielcd -- -P
ändert sich in ein Unterverzeichnis genannt-P
, abercd -- -
ist das gleiche wiecd -
, es nicht in ein Verzeichnis ändern genannt-
. Ebensocat -- -
wird nicht aus einer aufgerufenen Datei-
sondern aus der Standardeingabe gelesen .quelle
-
ist in den POSIX Utility-Syntaxrichtlinien als Standardeingabe definiert:Sie können diese Definition für Dienstprogramme sehen, die mit Dateien zum Lesen oder Schreiben arbeiten.
cd
gehört nicht zu diesen Dienstprogrammen, daher-
folgt cd dieser Richtlinie nicht.Außerdem hat POSIX
-
mit cd auch eine eigene Bedeutung :quelle
cd -
ist eigentlich eine Abkürzung fürcd "$OLDPWD" && pwd
, wobei festgelegt$OLDPWD
wird, wann immer Sie Verzeichnisse in das Verzeichnis ändern, in dem Sie sich gerade befanden.Die Handhabung
-
hängt von der Anwendung ab. Einige Anwendungen verwenden ,-
um anzuzeigenSTDIN
, zum Beispielgrep
,awk
Andere Anwendungen können verwendet werden
-
als Abkürzung für alles , was sie, wie Michaels Antwort gibt an , wählen mitsu
,-
ist eine Abkürzung für--login
quelle
Obwohl Michael erwähnt, dass
su
und andere Anwendungen-
bedeuten können, was auch immer sie wollen (Lesen von stdin ist üblich), verwendet Git auf-
ähnliche Weisecd
wie , um Zweige zu wechseln.quelle
Jedes Programm kann
-
als Argument verwenden, um zu bedeuten, was immer es will. Ein bekanntes Beispiel istsu
, das-
als Abkürzung für verwendet--login
. Die einzige Konvention, an die ich denken kann, ist, dass Programme, die aus Dateien lesen, häufig "read from stdin"-
bedeuten , aber es liegt ganz beim Programmquelle
Fügen Sie hier meine zwei Cent. Ich verwende '-', um dem ps2pdf-Tool mitzuteilen, dass es von der Standardeingabe lesen soll, wie bereits von mehreren Personen vorgeschlagen:
Der obige Einzeiler erstellt eine PDF-Version der Manpage für ls im aktuellen Verzeichnis.
Hoffe, jemand findet es nützlich :).
quelle
Hat , wie von Gnouc geantwortet ,
-
eine eigene Bedeutung incd
.Sie können jedoch das Verhalten
-
in anderen Programmen mit replizieren~-
. Zum Beispiel:quelle