Respuestas:
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:
-P, --physical
avoid all symlinks
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, ejecutando
echo $PWD
volverá:
/var/run
y será el mismo para pwd. Sin embargo, si ejecuta:
pwd -P
volverá
/run
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 -Py echo $PWDes cuando hay enlaces simbólicos.