¿Qué es $ PWD? (vs directorio de trabajo actual)

27

Entonces Wikipedia ( enlace ) me dice que el comando pwdes la abreviatura de "imprimir directorio de trabajo", y eso tiene sentido.

Pero para la variable de entorno, la "P" tiene que ser un acrónimo de algo más que imprimir.

Escucho personas hablando sobre el "directorio de trabajo actual", que suena mejor y es más intuitivo, pero aún así la variable de entorno parece llamarse $ PWD y no $ CWD. Nadie nunca dice "¿Comprobó la variable de directorio de trabajo de impresión?".

Actualmente estoy jugando con el servidor de aplicaciones web uWSGI, y cuando lo ejecuto me dice (en la página de estadísticas de uWSGI):

"cwd":"/home/velle/greendrinks",

por lo que, obviamente, al igual que el (acrónimo más intuitiva) cwdsobre pwd.

Supongo que estoy tratando de averiguar si he entendido mal algo, o si es solo una cuestión de haberle dado un nombre poco intuitivo a la variable de entorno.

Mads Skjern
fuente
55
Directorio de trabajo actual?
DarioP
3
Sospecho que lo estás pensando demasiado. $PWDes equivalente a `pwd`, y eso fue justificación suficiente.
ese otro tipo
1
Otra suposición: ¿Procesar directorio de trabajo?
oxfn

Respuestas:

23

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]

    Imprime el nombre del directorio de trabajo actual.

    Opciones:

      -L
          imprime el valor de $PWD si nombra el directorio de trabajo actual
      -P
          imprima el directorio físico, sin enlaces simbólicos

    Por defecto, 'pwd' se comporta como si se especificara '-L'.

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 los sistemas GNU (como Ubuntu), pwdy echo $PWDson equivalentes a menos que use la -Popción, pero /bin/pwdes diferente y se comporta como pwd -P.

Fuente /ubuntu//a/476633/291937

Thushi
fuente
1
@llua Nothing prohíbe PWDser una variable de entorno. En realidad, es el caso predeterminado con la mayoría de los shells, si no todos, y tiene sentido proporcionarlo a los procesos secundarios.
jlliagre
1
Me pregunto por qué las personas votaron negativamente, parece una buena respuesta, y me explicaron a fondo.
Mads Skjern
2
@MadsSkjern El estándar POSIX requiere que la mayoría de los componentes incorporados también estén disponibles como comandos. Esto es para permitirles llamarlos directamente desde otros programas sin la necesidad de iniciar un shell.
jlliagre
2
Esto realmente no me responde la pregunta. La pregunta no es realmente sobre las diferencias entre $PWDy pwd(que ya se han cubierto en U&L antes de lo que creo), sino sobre las razones que llevaron a nombrar la variable " PWD".
John WH Smith
1
@Thushi Es más que probable que tengas razón. PWD fue introducido por ksh88qué documento como: PWD The present working directory set by the cd command.Debe agregar esto a su respuesta.
jlliagre