Jak wprowadzić katalog, którego nazwa jest tylko minusem?


26

Pobrałem lessn do mojego serwera WWW i rozpięła go.

Zawiera folder o nazwie -. Zakładałem, że wiem, jak sobie z tym poradzić, ale nie wiem.

Próbowałem cd -- -, ale to nie przynosi pożądanego efektu. Wydaje się, że stosowanie cytatów również na to nie wpływa. Wszędzie położyłem cięcia, bezskutecznie.

Jaki jest właściwy sposób przejścia do tego folderu?

Odpowiedzi:


34

Chcesz, aby parametr nie był parametrem, dlatego staramy się coś do tego dodać. Dostęp do bieżącego katalogu można uzyskać za pomocą ., dzięki czemu -można uzyskać dostęp do podfoldera na przemian za pomocą ./-.

cd ./-

Powodem, dla którego cd -- -to nie działa, jest to, że jest to realizowane inaczej, jeśli porównasz rm(zobacz man rm) do cd(zobacz man bashlub man cd), cdma inną interpretację, która postrzega -jako parametr (patrz man bashlub man cd).

Należy również zauważyć, że cdjest to funkcja wbudowana w powłokę, co można przeczytać w tej odpowiedzi :

cdnie jest poleceniem zewnętrznym - jest to wbudowana funkcja powłoki. Działa w kontekście bieżącej powłoki, a nie, jak to robią polecenia zewnętrzne, w kontekście rozwidlenia / wykonania jako osobny proces.

Istnieje cdpolecenie zewnętrzne , ale robi coś zupełnie innego .

To wyjaśnia, dlaczego implementacja jest inna, ponieważ Bash i Coreutils to dwie różne rzeczy.

Załóżmy, że nie uwierzysz w to, jak to potwierdzimy? Użyj whichi type.

 $ which cd && type cd
which: no cd in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.2:/usr/games/bin
cd is a shell builtin
 $ which rm && type rm
/bin/rm
/bin/rm is /bin/rm

Zobacz man whichwięcej informacji, a man bashczy man typedlatype


4
Nie, „-” jest zaimplementowane we wszystkich standardowych narzędziach, ale ma na celu zakończenie opcji. Sam „-” nie jest rozpoznawany jako opcja, ale jako poprzedni katalog.
Stéphane Chazelas

4
Prawidłowe rozwiązanie, ale wyjaśnienie jest błędne. Wbudowane jest całkowicie nieistotne cd. Powód cd -- -nie działa, ponieważ -jest operandem, a nie opcją.
Gilles „SO- przestań być zły”

1
w systemie Mac OS X cd -- -zmieni się na katalog o nazwie -w bieżącym katalogu. FWIW.
Tim Kennedy

Większość komentarzy znalazła odzwierciedlenie w drugiej części mojego postu.
Tamara Wijsman

22

Sam minus (aka myślnik) nie jest opcją, ale operandem (tzn. Argumentem, który nie jest opcją). Z tego powodu stawianie --przed nim nie ma żadnego efektu. Myślnik jest operandem cd -i nadal operandem w cd -- -. Podobnie jak inne standardowe narzędzia, cdtraktuje operand jak operand, niezależnie od tego, czy jest --przed nim.

cdKomenda przypisuje szczególne znaczenie dla argumentu -. Wszystko inne to katalog, do którego można się przełączyć. cd -- -aprzechodzi do katalogu o nazwie -a, ponieważ -anie jest specjalny jako operand i --zapobiega cdtraktowaniu go jako opcji. To nie działa w -pojedynkę, co nie jest opcją.

Umieszczanie cudzysłowów -nie pomoże, ponieważ i tak ostatecznie przejdzie operand -.

Dlatego jedynym wyjściem jest znalezienie innego sposobu wyrażenia tego samego pomysłu, tj. Innej nazwy dla tego samego katalogu. Na szczęście jest prosty: jeśli dodasz ./przed względną nazwą pliku, nadal oznacza to ten sam plik. ./Robi różnicę, która nie ma znaczenia w naszym przypadku: CDPATHnie jest konsultowany, kiedy rozpoczyna się nazwa katalogu /, ./lub ../. A zatem:

cd ./-

Innym sposobem, ponieważ -jest katalogiem, jest dodanie /po nim. Dodanie /na końcu nazwy pliku gwarantuje, że plik jest traktowany jako katalog (w szczególności polecenie będzie działać na samym katalogu, a nie na dowiązaniu symbolicznym, jeśli plik jest dowiązaniem symbolicznym do katalogu), ale w inny sposób powoduje bez różnicy. A zatem:

cd -- -/

Nawiasem -/mówiąc, pisanie jest sugerowane przez kod zakończenia, ale w bash tak naprawdę działa tylko --przed nim, bash nie ma specjalnego przypadku cd -/(zsh robi).


To mnie zaskakuje, tak naprawdę próbowałem cd -- -/, ale ponieważ wcześniej uruchomiłem odpowiednik cd -tego katalogu, katalog tak naprawdę nie istniał i zinterpretowałem go jako kolejną nieudaną próbę.
Der Hochstapler

5

Kwalifikacja za pomocą ścieżki jest jedną z opcji.

cd ./-

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.