Übergeben Sie als Argument `.` das aktuelle Verzeichnissymbol

0

ich lese Windows - Was sind "." und ".." in einem Verzeichnis? - Superuser

Es erklärt:

Der einzelne Punkt . wird auch verwendet, wenn Sie das aktuelle Verzeichnis als Argument an einen Befehl übergeben möchten.

Ich bin sehr verwirrt. Kann jemand ein Beispiel geben?

JawSaw
quelle
1
Es gibt Beispiele in den Kommentaren unter dieser bestimmten Antwort. Was genau verstehst du nicht oder hast du Probleme damit?
Mokubai

Antworten:

1

Die Frage ist über Windows, aber Sie haben getaggt Daher gilt meine Antwort für Linux.

Jedes Mal, wenn Sie einen Befehl aufrufen, gibt es einen Arbeitsverzeichnis Du bist gerade dabei; . bezeichnet dieses Verzeichnis. pwd ist ein allgemeiner Befehl, um zu wissen, was dieses Verzeichnis ist. Während der Arbeit in einer Muschel wie bash Sie können mit in ein anderes Verzeichnis wechseln cd /another/directory/path.

Einige Befehle (wie cd oben) Verzeichnisse (d. h. deren Pfade) als Argumente akzeptieren. Jetzt möchte ich über offensichtliche Grundlagen sprechen. aber deine frage scheint einfach zu sein, also los geht's. Die allgemeine Syntax, an die ein Argument übergeben werden soll some_command ist wie:

some_command argument

oder sogar eine beliebige Anzahl von Argumenten (vier in diesem Beispiel):

some_command argument1 argument2 "argument3 with spaces" argument4

Sie können verwenden . als Argument anstelle des von zurückgegebenen Pfades pwd. Ob Der Befehl interpretiert es als Pfad zum Verzeichnis, dann sollte es als das aktuelle Arbeitsverzeichnis verstanden werden. Obwohl cd . hat wenig Sinn, weil es Ihre Shell dazu bringt, in dasselbe Verzeichnis zu "wechseln", in dem sie sich bereits befindet. Die Syntax ist vollkommen gültig. Nützliches Beispiel ist

df .

Es wird der Speicherplatzbedarf des Dateisystems gemeldet, in dem sich Ihr aktuelles Arbeitsverzeichnis befindet.

Es gibt Befehle, die standardmäßig für das aktuelle Arbeitsverzeichnis ausgeführt werden: ls ist äquivalent zu ls ., du ist äquivalent zu du .. Beachten Sie, dass dies nicht immer der Fall ist: df druckt dabei alle verfügbaren Dateisysteme aus df . druckt nur einen davon.


Ich hab geschrieben " ob Der Befehl interpretiert ihn als Pfad zum Verzeichnis ", da einige Befehle dies nicht tun bash der Befehl

tr . , <<< foo.bar

wird gedruckt foo,bar ( tr ersetzt . mit , im gegebenen foo.bar Zeichenfolge). Das ist weil tr interpretiert . als Einzelzeichenfolge.

Das zeigt . wird von der Shell nicht in den aktuellen Verzeichnispfad übersetzt. Vergleichen Sie dies mit ~ was auf den Wert von übersetzt wird $HOME (Versuchen echo ~ im bash ). Die Interpretation von . da ein bestimmter Pfad weit in das Design des Verzeichnisbaums unter Linux hineinreicht (allgemeiner: unter UNIX).

So kann jeder Befehl interpretieren . allein. Wenn es sich jedoch um einen Verzeichnispfad handelt, sollte es sich laut Konvention um das aktuelle Arbeitsverzeichnis handeln. Linux versteht dies und bietet Tools, um diese "Konvertierung" zu unterstützen.


Beachten Sie auch ls -a fast immer druckt . unter dem "echten" Verzeichnisinhalt. Interessant wird es, wenn Ihr aktuelles Arbeitsverzeichnis gelöscht wird. In diesem Fall ls -a druckt nichts, aber ls . oder df . noch arbeiten, als ob . war dort.

Kamil Maciorowski
quelle
1

Ein leicht erfundenes Windows-Beispiel: Sie können verwenden . So legen Sie die Attribute des aktuellen Verzeichnisses fest:

C:\Path\to\Some\Directory> md sub1 sub2

C:\Path\to\Some\Directory> attrib * /s /d
             C:\Path\to\Some\Directory\sub1
             C:\Path\to\Some\Directory\sub2

C:\Path\to\Some\Directory> cd sub2

C:\Path\to\Some\Directory\sub2> attrib +r .

C:\Path\to\Some\Directory\sub2> cd ..

C:\Path\to\Some\Directory> attrib * /s /d
             C:\Path\to\Some\Directory\sub1
     R       C:\Path\to\Some\Directory\sub2

Hier setzen wir das schreibgeschützte Attribut für das sub2 Verzeichnis während wir drin sind. attrib +r . ist kürzer und einfacher zu tippen als attrib +r ..\sub2 oder attrib +r C:\Path\to\Some\Directory \sub2.

G-Man
quelle