Dlaczego pwd nie akceptuje długich opcji, takich jak --fizyczne?


11

Kiedy wyświetlam instrukcję dla pwdpolecenia, jest napisane, że --physicalobsługiwane są długie opcje takie jak

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

Jednak kończy się niepowodzeniem, gdy wpisuję następujące polecenie

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

Dlaczego długie opcje nie działają dla mnie?

Używam RHEL 6.4. Nie skonfigurowano aliasu dla pwd. Wygląda na to, że jest to standardowy pwd:

$ which pwd
/bin/pwd

1
Strona podręcznika dotyczy samodzielnego narzędzia, które nie jest częścią bash.
Thomas Dickey,

7
Użyj typezamiast which, ponieważ whichpokazuje tylko polecenia, podczas gdy typepokazuje słowa kluczowe, wbudowane, aliasy, funkcje i polecenia (oraz haszowane ścieżki poleceń). Aby uzyskać więcej informacji, zobacz Dlaczego nie użyć „które”? Czego więc użyć?
wjandrea

1
W moim systemie man pwdma następującą notatkę: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supportsna dole DESCRIPTIONsekcji.
Nykakin

Odpowiedzi:


26

bashma wbudowane polecenie, pwdktórego używasz po prostu wpisując pwdw swojej powłoce.

Aby uzyskać pwdzgodnie z opisem na stronie podręcznika, musisz wymusić użycie polecenia zewnętrznego. Możesz to zrobić, określając pełną ścieżkę do pliku wykonywalnego ( /bin/pwdw twoim przypadku) lub przygotowując envprzed wierszem:, env pwdktóry uruchamia envpolecenie, którego można użyć do dodania ustawień do środowiska (ale nie jest to tutaj zrobione), a następnie envuruchamia się polecenie określone. Ponieważ envnie ma wbudowanego pwd, /bin/pwdwykonywane jest „prawdziwe” .

Zaletą wbudowanego pwdbasha jest to, że bashśledzi bieżący katalog, więc uzyskanie wartości jest zerowe, podczas gdy zewnętrzne polecenie musi przeszukać system plików, aby ustalić ścieżkę, która wymaga dużo więcej operacji IO.


4
W rzeczywistości tak nie działa zewnętrzne polecenie. unix.stackexchange.com/a/413225/5132
JdeBP

BTW: Możesz również wyłączyć wbudowaną powłokę (przynajmniej w bash) przezenable -n pwd
derobert

@JdeBP Kiedyś ostatnio patrzyłem (dawno temu :-)); i podczas gdy teraz korzysta z getcwd()wywołania systemowego, jądro nadal przechodzi przez system plików, co jest łatwiejsze do wykonania w przestrzeni jądra ze względu na dostęp do odpowiednich struktur danych, jak wynika z połączonej odpowiedzi: „Należy jednak pamiętać, że nawet na FreeBSD i innych działających systemy jądro nie śledzi katalogu roboczego za pomocą łańcucha. "
wurtel

11

Ta strona podręcznika dokumentuje /bin/pwd, ale po uruchomieniu pwdużywasz wbudowanej powłoki; zobacz wynik

type pwd

Wbudowana powłoka pwdnie obsługuje długich opcji (zobacz dokumentację powłoki; ponieważ używasz Bash, help pwdzapewni podsumowanie).

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.