Cuando muestro el manual para el pwd
comando, dice que --physical
se 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
type
lugar dewhich
, ya quewhich
solo muestra comandos, mientras quetype
muestra 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?man pwd
tiene 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 supports
en la parte inferior de laDESCRIPTION
sección.Respuestas:
bash
tiene un comando incorporadopwd
que es lo que está utilizando cuando simplemente escribepwd
en su shell.Para obtener lo
pwd
descrito en la página de manual, debe forzar el uso del comando externo. Puede hacerlo especificando la ruta completa al ejecutable (/bin/pwd
en su caso) o anteponiendoenv
antes de la línea:,env pwd
que inicia elenv
comando que se puede usar para agregar configuraciones al entorno (pero que no se hace aquí) y luegoenv
comienza El comando especificado. Comoenv
no tiene una función incorporadapwd
,/bin/pwd
se ejecuta lo "real" .La ventaja de la función integrada
pwd
en bash es quebash
realiza 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.fuente
enable -n pwd
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 ".Esa página de manual documenta
/bin/pwd
, pero cuando ejecutaspwd
estás usando el shell incorporado; ver la salida deLa función integrada de su shell
pwd
no admite opciones largas (consulte la documentación de su shell, ya que está utilizando Bash,help pwd
proporcionará un resumen).fuente