cd -
można przełączać między bieżącym a poprzednim katalogiem.
Wygląda na to, że widziałem -
wcześniej jako argumenty innych poleceń, choć nie pamiętam, czy -
oznacza to to samo co z cd
.
Odkryłem, że -
to nie działa ls
.
Jest -
używany tylko z cd?
cd
jest to wbudowane, a nie zewnętrzne polecenie (ani nie miałoby żadnego sposobu, aby działać jako jedno).cd -
jest zatem funkcją poziomu powłoki.git checkout -
aby przejść do poprzedniej gałęzi-
używane z innymi wbudowanymi w ten sam sposób?pushd
: tak. W przeciwnym razie znaczenie „poprzedniego katalogu” nie jest strasznie użytecznym domyślnym.Odpowiedzi:
Te wytyczne składniowe narzędzie POSIX (konkretnie 13) określa, że za media, które oczekują nazwa pliku do odczytu z,
-
środki standardowego wejścia, a za media, które oczekują nazwę pliku do zapisu,-
środki standardowe wyjście. Na przykładcat somefile -
kopiuje zawartośćsomefile
na standardowe wyjście, a następnie to, co czyta na standardowym wejściu.Ta wytyczna nie dotyczy
cd
polecenia, ponieważ nie odczytuje ani nie zapisuje pliku.cd
robi coś innego: argument-
oznacza „poprzedni katalog”. Poleceniecd -
jest równoważne zcd "$OLDPWD" && pwd
. To zachowanie jest specyficzne dlacd
polecenia i poleceń inspirowanych bezpośrednio, takich jakpushd
.Zauważ, że
-
jest operandem, a nie opcją. Tylko argumenty, które zaczynają się-
i nie są tylko-
lub--
są opcjami. Główną implikacją bycia operandem jest to, że--
nie wpływa ono na jego specjalne znaczenie. Na przykładcd -- -P
zmiany w podkatalogu o nazwie-P
, alecd -- -
jest taki sam jakcd -
, nie zmienia się w katalogu o nazwie-
. Podobnie,cat -- -
nie czyta z pliku o nazwie,-
ale ze standardowego wejścia.źródło
-
jest zdefiniowany w Wytycznych dotyczących składni narzędzi POSIX jako standardowe wejście:Możesz zobaczyć tę definicję dla narzędzi, które działają z plikami do odczytu lub zapisu.
cd
nie należy do tych narzędzi, więc-
w cd nie przestrzega tych wytycznych.Poza tym POSIX również zdefiniował
-
ma własne znaczenie w cd :źródło
cd -
jest w rzeczywistości skrótemcd "$OLDPWD" && pwd
, gdzie$OLDPWD
jest ustawiane za każdym razem, gdy zmieniasz katalogi na katalog, w którym właśnie byłeś.Obsługa
-
zależy od aplikacji. Niektóre aplikacje używają-
oznaczaćSTDIN
, na przykładgrep
,awk
Inne aplikacje mogą być
-
skrótem do wszystkiego, co wybiorą, jak określa odpowiedź Michaela za pomocąsu
,-
jest skrótem--login
źródło
Choć Michael wspomina, że
su
i inne aplikacje mogą używać-
znaczyć co chcą (odczyt z stdin jest powszechne), Git robi wykorzystania-
w sposób podobny do tego, jakcd
robi , na zmianę oddziałów.źródło
Każdy program może użyć
-
jako argumentu, co oznacza, co chce. Jednym z typowych przykładów jestsu
, który wykorzystuje-
jako skrót dla--login
. Jedyną konwencją, o której mogę pomyśleć, jest to, że programy, które odczytują z plików często używają,-
aby oznaczać „czytać ze standardowego wejścia” , ale to całkowicie zależy od programuźródło
Dodając tutaj moje dwa centy. Używam „-”, aby powiedzieć narzędziu ps2pdf, aby czytało ze standardowego wejścia, jak sugerowało wcześniej kilka osób:
Powyższy jeden-linijka tworzy wersję pdf strony man dla ls w bieżącym katalogu.
Mam nadzieję, że ktoś uzna to za przydatne :).
źródło
Jak odpowiedział gnouc ,
-
ma swoje znaczenie wcd
.Można jednak replikować zachowanie
-
innych programów za pomocą~-
. Na przykład:źródło