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.
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.
Odpowiedzi:
Co najmniej dwa sposoby:
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 -- -myfilei 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.
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.
cdstrony „ cdNarzędzie powinno być zgodne z ... rozdział 12.2”.
"hello world"jest jeden argument, ale hello worldjest dwa i "-2"jest taki sam jak -2.
cd -- --albo cd ./--powinien działać.
To powinno działać:
cd -- -2
- oznacza brak opcji
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ń.