Tengo un script de shell en /usr/bin
. Llamémoslo hello
.
Contiene esto:
echo "I am located in $PWD"
echo "I am called from this directory: ???"
Ejecutando hello
desde /home/Documents
Espero el siguiente resultado:
I am located in /usr/bin
I am called from this directory: /home/Documents
¿Cómo puedo obtener la ruta del directorio desde donde se ejecuta el script?
Respuesta aceptada:
No puedo comentar sobre otra respuesta, así que estoy publicando aquí. Como se dijo, dirname
solo lee $0
y toma el nombre del directorio, por lo que si llamó a algo como ../../directory/something.sh
no resuelve esos puntos, solo devuelve ../../directory
. En lugar de usar la expansión de subshell con cd
y pwd
, puede usar un comando muy inteligente readlink
que en realidad resuelve no solo los directorios punteados sino también todos los enlaces simbólicos. Por lo tanto, sugiero
echo "I am located at $(readlink -e -- "$0")"
Puede usar otro dirname
alrededor de esto para obtener el directorio en lugar del archivo.