Wie kann man in ein Verzeichnis mit diesem Namen "-2" (beginnend mit dem Bindestrich) CD?


169

Ich habe ein Verzeichnis mit dem Namen:

-2

Ich möchte eine CD aufnehmen, aber die CD beklagt sich:

bash: cd: -2: invalid option

Ohne Erfolg habe ich versucht:

cd "-2"
cd '-2'
cd \-2

Irgendeine Lösung?

Bearbeiten: Auf dem Server sind keine Dateibrowser wie mc usw. verfügbar.


2
Verwandte Frage auf Superuser: superuser.com/questions/361573/...
YMS

Antworten:


272

Mindestens zwei Möglichkeiten:

  1. Verwenden Sie das --Argument.

    cd -- -2
    

    Dabei wird eine für GNU-Tools übliche Konvention verwendet, bei der nichts, was danach erscheint, --als Befehlszeilenoption behandelt wird.

    Wie ein Kommentator feststellte, ist diese Konvention auch im POSIX-Standard definiert :

    Standardverhalten: Wenn dieser Abschnitt als "Keine" aufgeführt ist, bedeutet dies, dass die Implementierung keine Optionen unterstützen muss. Standarddienstprogramme, die keine Optionen akzeptieren, aber Operanden akzeptieren, müssen "--"als erstes zu verwerfendes Argument erkennen .

    Die Anforderung für das Erkennen "--"besteht darin, dass konforme Anwendungen eine Möglichkeit benötigen, ihre Operanden vor beliebigen Optionen zu schützen, die die Implementierung als Erweiterung bereitstellen kann. Wenn für das Standarddienstprogramm foo beispielsweise angegeben ist, dass es keine Optionen verwendet, und die Anwendung einen Pfadnamen mit einem führenden Bindestrich benötigt, kann dies sicher folgendermaßen erfolgen:

    foo -- -myfile
    

    und vermeiden Sie Probleme mit -m als Erweiterung.

    sowie :

    Leitlinie 10:
    Das Argument --sollte als Trennzeichen für das Ende der Optionen akzeptiert werden. Alle folgenden Argumente sollten als Operanden behandelt werden, auch wenn sie mit dem '-'Zeichen beginnen . Das --Argument sollte nicht als Option oder als Operand verwendet werden.

  2. Geben Sie den Pfad explizit an:

    cd ./-2
    

    Dies gibt den Pfad an, in dem das aktuelle Verzeichnis ( .) explizit als Ausgangspunkt angegeben wird.

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    

    Dies sind Variationen der oben genannten. Es kann eine beliebige Anzahl solcher Variationen möglich sein; Ich überlasse es dem Leser als Übung, sie alle zu entdecken.


23
Es ist nicht nur GNU, es ist Teil des POSIX-Standards. Siehe 1.11 Utility Description Defaults und 12.2 Utility Syntax Guidelines (Richtlinie 10). Von der cdSeite "Das cdDienstprogramm muss ... Abschnitt 12.2 entsprechen".
Dietrich Epp

Jetzt bin ich nur neugierig, wie man in ein Verzeichnis namens - cd!
Sergiol

2
@ Sergiol Der gleiche Weg.
Michael Hampton

1
@ArtB: Nein. Das Zitieren wirkt sich nur auf die Feldaufteilung aus. So "hello world"ist ein Argument, aber hello worldzwei, und "-2"ist das gleiche wie -2.
Dietrich Epp

1
@sergiol: Entweder cd -- --oder cd ./--sollte funktionieren.
Keith Thompson


26

Dies funktioniert, wenn sich '-2' im aktuellen Verzeichnis befindet.

    cd ./-2

Sie können automatisch vervollständigen, indem Sie - eingeben und die Tabulatortaste drücken.


11

cd /home/...../-2 funktioniert auch. Geben Sie den vollständigen Pfad für den Zugriff an.


7

Zur Ergänzung, wenn Sie dieses Verzeichnis entfernen / löschen möchten, können Sie den folgenden Befehl verwenden:

rm -r -- -2

... und nur als Ergänzung würde ich das niemals tun, sondern ich werde ein grafisches Tool wie mc verwenden oder das Verzeichnis zuerst umbenennen.
Nick

-1

Ich weiß, dass diese Frage bereits beantwortet wurde. Wenn jemand eine Situation wie meine hat, ist dies für ihn:

Ich habe eine Java-App ausgeführt und es wurde nach einem Verzeichnis gesucht <path>, das mit beginnt . Ich sollte dieses Verzeichnis durch den richtigen Pfad ersetzen, bevor ich die App ausführe. Das habe ich jedoch vergessen. Die App hat ein Verzeichnis namens erstellt <path>.

Ich habe versucht, cd <path>- gab mir Fehler "-bash: Syntaxfehler in der Nähe von unerwartetem Token Newline" Basierend auf dem Vorschlag hier (ich verstehe, dass es für Verzeichnis beginnend mit - und nicht <) habe ich versucht cd -- <path>. Ich habe jedoch den gleichen Fehler bekommen.

Als ich es versuchte cd \<path>\- das hat funktioniert!

Hintergrundinformation:

Die Symbole "<" und ">" werden zum Umleiten von STDIN und STDOUT verwendet. Sie müssen daher maskiert werden, damit die Shell sie nicht als Umleitungen interpretiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.