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, $PWDes una variable de entorno y pwdes 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 $PWDmenos que use la -Pbandera. 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 pwdbinario, 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), pwdy echo $PWDson equivalentes a menos que use la -Popción pero /bin/pwdsea 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 -Pcuando 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/runque apunta/runy 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 -Pyecho $PWDes cuando hay enlaces simbólicos.fuente