¿Por qué pwd no acepta opciones largas como --physical?

11

Cuando muestro el manual para el pwdcomando, dice que --physicalse admiten opciones largas como

$ 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

Sin embargo, falla cuando escribo lo siguiente

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

¿Por qué las opciones largas no funcionan para mí?

Estoy usando RHEL 6.4. No hay alias para pwd configurado. Parece que es pwd estándar:

$ which pwd
/bin/pwd
Michal Kordas
fuente
1
La página del manual es para una utilidad independiente que no forma parte de bash.
Thomas Dickey
77
Use en typelugar de which, ya que whichsolo muestra comandos, mientras que typemuestra palabras clave, builtins, alias, funciones y comandos (y rutas de comandos hash). Para obtener más detalles, consulte ¿Por qué no usar "which"? ¿Qué usar entonces?
wjandrea
1
En mi sistema man pwdtiene la siguiente nota: 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 supportsen la parte inferior de la DESCRIPTIONsección.
Nykakin

Respuestas:

26

bashtiene un comando incorporado pwdque es lo que está utilizando cuando simplemente escribe pwden su shell.

Para obtener lo pwddescrito en la página de manual, debe forzar el uso del comando externo. Puede hacerlo especificando la ruta completa al ejecutable ( /bin/pwden su caso) o anteponiendo envantes de la línea:, env pwdque inicia el envcomando que se puede usar para agregar configuraciones al entorno (pero que no se hace aquí) y luego envcomienza El comando especificado. Como envno tiene una función incorporada pwd, /bin/pwdse ejecuta lo "real" .

La ventaja de la función integrada pwden bash es que bashrealiza un seguimiento del directorio actual, por lo que obtener el valor tiene un costo cero, mientras que el comando externo necesita buscar a través del sistema de archivos para determinar la ruta, que es mucho más intensiva en E / S.

wurtel
fuente
44
Así no funciona realmente el comando externo. unix.stackexchange.com/a/413225/5132
JdeBP
BTW: También puede desactivar la orden interna del shell (por lo menos en bash) porenable -n pwd
Derobert
@JdeBP Solía ​​ser la última vez que miré (hace mucho tiempo :-)); y aunque ahora usa la getcwd()llamada al sistema, el kernel todavía atraviesa el sistema de archivos, lo que es más fácil de hacer en el espacio del kernel debido al acceso a las estructuras de datos relevantes, como dice la respuesta vinculada: "Sin embargo, tenga en cuenta que incluso en FreeBSD y otros sistemas el núcleo no realiza un seguimiento del directorio de trabajo con una cadena ".
wurtel
11

Esa página de manual documenta /bin/pwd, pero cuando ejecutas pwdestás usando el shell incorporado; ver la salida de

type pwd

La función integrada de su shell pwdno admite opciones largas (consulte la documentación de su shell, ya que está utilizando Bash, help pwdproporcionará un resumen).

Stephen Kitt
fuente