Jak przejść do katalogu o nazwie „-2” (zaczynając od myślnika)?

169

Mam katalog o nazwie:

-2

Chcę w to zagrać, ale cd narzeka:

bash: cd: -2: invalid option

Bezskutecznie próbowałem:

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

Jakieś rozwiązanie?

Edycja: na serwerze nie ma dostępnych przeglądarek plików, takich jak mc itp.

użytkownik151851
źródło
2
Powiązane pytanie na temat administratora: superuser.com/questions/361573/...
yms

Odpowiedzi:

272

Co najmniej dwa sposoby:

  1. Użyj --argumentu.

    cd -- -2
    

    Wykorzystuje to konwencję wspólną dla narzędzi GNU, która nie traktuje niczego, co pojawia się po, --jako opcji wiersza poleceń.

    Jak zauważył komentator , konwencja ta jest również zdefiniowana w standardzie POSIX :

    Domyślne zachowanie: Gdy ta sekcja jest wymieniona jako „Brak”, oznacza to, że implementacja nie musi obsługiwać żadnych opcji. Standardowe narzędzia, które nie akceptują opcji, ale akceptują operandy, będą uznawane "--"za pierwszy argument, który należy odrzucić.

    Wymaganie do rozpoznania "--"jest spowodowane tym, że zgodne aplikacje potrzebują sposobu ochrony swoich argumentów przed wszelkimi dowolnymi opcjami, które implementacja może zapewnić jako rozszerzenie. Na przykład, jeśli standardowe narzędzie foo jest wymienione jako nie przyjmujące żadnych opcji, a aplikacja musi nadać mu ścieżkę z wiodącym łącznikiem, może bezpiecznie to zrobić jako:

    foo -- -myfile
    

    i unikaj problemów z -m używanym jako rozszerzenie.

    a także :

    Wytyczna 10:
    Argument --powinien zostać zaakceptowany jako separator wskazujący koniec opcji. Wszelkie poniższe argumenty należy traktować jak operandy, nawet jeśli zaczynają się od '-'znaku. --Argument nie powinien być stosowany jako opcja lub jako argumentu.

  2. Podaj ścieżkę jawnie:

    cd ./-2
    

    Określa ścieżkę jawnie nazywającą bieżący katalog ( .) jako punkt początkowy.

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

    Są to odmiany powyżej. Możliwa jest dowolna liczba takich odmian; Zostawię to jako ćwiczenie dla czytelnika, aby odkryć je wszystkie.

Michael Hampton
źródło
23
To nie tylko GNU, to część standardu POSIX. Patrz 1.11 Ustawienia domyślne narzędzia i 12.2 Wytyczne dotyczące składni narzędzia (wytyczna nr 10). Ze cdstronycdNarzędzie powinno być zgodne z ... rozdział 12.2”.
Dietrich Epp
Teraz jestem ciekawy, jak wykonać cd do katalogu o nazwie -!
sergiol
2
@sergiol W ten sam sposób.
Michael Hampton
1
@ ArtB: Nie. Cytowanie wpływa tylko na dzielenie pól. Więc "hello world"jest jeden argument, ale hello worldjest dwa i "-2"jest taki sam jak -2.
Dietrich Epp
1
@sergiol: Albo cd -- --albo cd ./--powinien działać.
Keith Thompson
49

To powinno działać:

cd -- -2 

- oznacza brak opcji

Tim Haegele
źródło
26

Działa to, jeśli „-2” znajduje się w bieżącym katalogu.

    cd ./-2

Możesz autouzupełnianie, wpisując - i naciskając klawisz Tab.

Newbee
źródło
11

cd /home/...../-2 również działa. Podaj pełną ścieżkę dostępu.

Vivek
źródło
7

Aby uzupełnić, jeśli chcesz usunąć / usunąć ten katalog, możesz użyć następującego polecenia:

rm -r -- -2
Zignd
źródło
... i dla uzupełnienia, nigdy bym tego nie zrobił, raczej użyję narzędzia graficznego takiego jak mc lub najpierw zmienię nazwę katalogu.
Nick
-1

Wiem, że na to pytanie już udzielono odpowiedzi. Jeśli ktoś ma sytuację taką jak moja, to dla nich:

Uruchomiłem aplikację Java i szukałem katalogu zaczynającego się od. <path>Miałem zastąpić go właściwą ścieżką przed uruchomieniem aplikacji. Jednak zapomniałem to zrobić. Aplikacja utworzyła katalog o nazwie <path>.

Próbowałem cd <path>- dał mi błąd „-bash: błąd składni w pobliżu nieoczekiwanego nowego wiersza tokena” Na podstawie sugestii tutaj (rozumiem, że to dla katalogu zaczynającego się od - a nie <) próbowałem cd -- <path>. Mam jednak ten sam błąd.

Kiedy próbowałem cd \<path>\- zadziałało!

Informacje dodatkowe:

Symbole „<” i „>” są używane do przekierowania STDIN i STDOUT, dlatego należy je uciec, aby powłoka nie interpretowała ich jako przekierowań.

Jobin Thomas
źródło