desarrollo-web-br-bd.com

¿Cómo puedo obtener el directorio de trabajo actual?

Quiero tener un script que lleve el directorio de trabajo actual a una variable. La sección que necesita el directorio es así dir = pwd. Simplemente imprime pwd ¿cómo obtengo el directorio de trabajo actual en una variable?

205
Interesting...

No hay necesidad de hacer eso, ya está en una variable:

$ echo $PWD
/home/terdon

La variable PWD es definida por POSIX y funcionará en todos los shells compatibles con POSIX:

PWD

Establecido por el Shell y por la utilidad cd. En el Shell, el valor se inicializará del entorno de la siguiente manera. Si se pasa un valor para PWD al Shell en el entorno cuando se ejecuta, el valor es un nombre de ruta absoluto del directorio de trabajo actual que no supera los {PATH_MAX} bytes, incluido el byte nulo de terminación, y el valor no contiene cualquier componente que sea punto o punto-punto, entonces el Shell establecerá PWD en el valor del entorno. De lo contrario, si se pasa un valor para PWD al Shell en el entorno cuando se ejecuta, el valor es un nombre de ruta absoluto del directorio de trabajo actual, y el valor no contiene ningún componente que sea punto o punto-punto, entonces no se especifica si el Shell establece PWD en el valor del entorno o establece PWD en el nombre de ruta que pwd -P generaría. De lo contrario, la utilidad sh establece PWD en la ruta que pwd -P generaría. En los casos en que PWD se establece en el valor del entorno, el valor puede contener componentes que hacen referencia a archivos de tipo enlace simbólico. En los casos en que PWD se establece en el nombre de ruta que pwd -P generará, si no hay permiso suficiente en el directorio de trabajo actual, o en cualquier padre de ese directorio, para determinar cuál sería ese nombre de ruta, el valor de PWD es sin especificar Las asignaciones a esta variable pueden ignorarse. Si una aplicación establece o desactiva el valor de PWD, los comportamientos de las utilidades cd y pwd no se especifican.


Para la respuesta más general, la forma de guardar la salida de un comando en una variable es encerrar el comando en $() o ` ` (Teclas de retroceso):

var=$(command)

o

var=`command`

De los dos, se prefiere el $() ya que es más fácil construir comandos complejos como command0 $(command1 $(command2 $(command3))).

305
terdon

dir=$(pwd)

Esto es más portátil y preferido sobre el método de backticks.

El uso de $() le permite anidar los comandos

por ejemplo: mech_pwd=$(pwd; echo in $(hostname))

30
Govind Kailas

Puede usar la variable de entorno $PWD, o escribe algo como:

dir=`pwd`
11
chrk

Debe usar la sustitución de comandos para guardar la salida del comando pwd en una variable. La sustitución de comandos puede usar backticks o caracteres en dólares Me gusta esto:

$ mkdir "/tmp/new dir"
$ cd "/tmp/new dir"
$ CWD="$(pwd)"
$ echo $CWD
/tmp/new dir
$ cd ~
$ echo $CWD
/tmp/new dir
$ pwd
/home/ja
5

El valor del directorio de trabajo actual puede ser diferente. Si utilizó enlaces simbólicos para obtener el directorio actual, pwd dará resultados diferentes que/usr/bin/pwd. Como estás usando bash, yo usaría:

dir=$(/usr/bin/pwd)

o según el comentario:

dir=$(pwd -P)

como no me gustan las comillas, ya que no pueden anidar.

1
Robert Jacobs