Kiedy wyświetlam instrukcję dla pwd
polecenia, jest napisane, że --physical
obsł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
type
zamiastwhich
, ponieważwhich
pokazuje tylko polecenia, podczas gdytype
pokazuje 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ć?man pwd
ma 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 supports
na doleDESCRIPTION
sekcji.Odpowiedzi:
bash
ma wbudowane polecenie,pwd
którego używasz po prostu wpisującpwd
w swojej powłoce.Aby uzyskać
pwd
zgodnie 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/pwd
w twoim przypadku) lub przygotowującenv
przed wierszem:,env pwd
który uruchamiaenv
polecenie, którego można użyć do dodania ustawień do środowiska (ale nie jest to tutaj zrobione), a następnieenv
uruchamia się polecenie określone. Ponieważenv
nie ma wbudowanegopwd
,/bin/pwd
wykonywane jest „prawdziwe” .Zaletą wbudowanego
pwd
basha jest to, żebash
ś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.źródło
enable -n pwd
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. "Ta strona podręcznika dokumentuje
/bin/pwd
, ale po uruchomieniupwd
używasz wbudowanej powłoki; zobacz wynikWbudowana powłoka
pwd
nie obsługuje długich opcji (zobacz dokumentację powłoki; ponieważ używasz Bash,help pwd
zapewni podsumowanie).źródło