Para imprimir el directorio de trabajo actual / actual, la variable de entorno $PWD
y el comando pwd
están disponibles. Entonces, ¿cuál es la diferencia en el uso de ambos? o ¿Qué se debe elegir para un propósito específico?
fuente
Para imprimir el directorio de trabajo actual / actual, la variable de entorno $PWD
y el comando pwd
están disponibles. Entonces, ¿cuál es la diferencia en el uso de ambos? o ¿Qué se debe elegir para un propósito específico?
Eso depende de lo que estés haciendo. En primer lugar, $PWD
es una variable de entorno y pwd
es un shell incorporado o un binario real:
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
Ahora, el bash incorporado simplemente imprimirá el valor actual de a $PWD
menos que use la -P
bandera. Como se explica en help pwd
:
pwd: pwd [-LP]
Print the name of the current working directory.
Options:
-L print the value of $PWD if it names the current working
directory
-P print the physical directory, without any symbolic links
By default, `pwd' behaves as if `-L' were specified.
El pwd
binario, por otro lado, obtiene el directorio actual a través de la getcwd(3)
llamada al sistema que devuelve el mismo valor que readlink -f /proc/self/cwd
. Para ilustrar, intente moverse a un directorio que sea un enlace a otro:
$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun 4 11:22 foo
lrwxrwxrwx 1 terdon terdon 4 Jun 4 11:22 linktofoo -> foo/
$ cd linktofoo
$ echo $PWD
/home/terdon/foo/linktofoo
$ pwd
/home/terdon/foo/linktofoo
$ /bin/pwd
/home/terdon/foo/foo
Entonces, en conclusión, en sistemas GNU (como Ubuntu), pwd
y echo $PWD
son equivalentes a menos que use la -P
opción pero /bin/pwd
sea diferente y se comporte como pwd -P
.
Ambos devolverán el mismo resultado si los usa sin opciones para todos los directorios de trabajo, incluso cuando se encuentran en enlaces simbólicos.
Sin embargo, de
man pwd
:Esto significaría ejecutar
pwd -P
cuando en enlaces simbólicos que apuntan a otros directorios se imprima la ruta al directorio original.Como ejemplo, si tiene un enlace simbólico
/var/run
que apunta/run
y está actualmente en el/var/run/
directorio, ejecutandovolverá:
y será el mismo para
pwd
. Sin embargo, si ejecuta:volverá
Por lo tanto, depende de la ruta que necesite: la ruta real sin enlaces simbólicos o el directorio actual que ignora los enlaces simbólicos. La única diferencia entre
pwd -P
yecho $PWD
es cuando hay enlaces simbólicos.fuente