girona español descargar bonn shell

shell - español - qgis girona



Obtener el directorio actual y concatenar una ruta (4)

El uso del shell incorporado pwd en una sustitución de comando ( $(...) ) es una opción, pero no es necesaria, porque todos los shells compatibles con POSIX definen la variable de shell especial $PWD que contiene el directorio actual como una ruta absoluta , según lo estipulado por POSIX .

Por lo tanto, usar $PWD es más simple y más eficiente que $(pwd) :

"$PWD/some/path" # alternatively, for visual clarity: "${PWD}/some/path"

Sin embargo, si desea resolver los enlaces simbólicos en la ruta del directorio, SÍ necesita pwd , con su opción -P :

"$(pwd -P)/some/path"

Tenga en cuenta que POSIX ordena que $PWD contenga una ruta de acceso absoluta con enlaces simbólicos resueltos . Sin embargo, en la práctica, NINGUNA shell principal similar a POSIX ( bash , dash , ksh , zsh ) hace eso, todos conservan componentes de enlace simbólico. Por lo tanto, se necesita pwd -P (compatible con POSIX) para resolverlos.
Tenga en cuenta que todos los shells similares a POSIX mencionados implementan pwd como un componente incorporado que admite -P .

La respuesta útil de Michael Allen señala que es común querer saber el directorio donde se encuentra el script en ejecución .

El desafío es que el archivo de script en puede ser un enlace simbólico , por lo que determinar el verdadero directorio de origen no es trivial , especialmente cuando la portabilidad es una necesidad.
Esta respuesta (mía) muestra una solución.

Este es un script de shell (archivo .sh). Necesito crear una ruta absoluta basada en el directorio actual. Sé sobre pwd , pero ¿cómo lo concateno con otra cadena? Aquí hay un ejemplo de lo que estoy tratando de hacer:

"$pwd/some/path"


Suena como quieres:

path="$(pwd)/some/path"

La $( abre una subshell (y la ) cierra) donde el contenido se ejecuta como un script, por lo que cualquier salida se coloca en esa ubicación en la cadena.

Más útil a menudo es obtener el directorio del script que se está ejecutando:

dot="$(cd "$(dirname "$0")"; pwd)" path="$dot/some/path"

Eso es más útil porque se resuelve en la misma ruta sin importar dónde se encuentre cuando ejecute el script:

> pwd ~ > ./my_project/my_script.sh ~/my_project/some/path

más bien que:

> pwd ~ > ./my_project/my_script.sh ~/some/path > cd my_project > pwd ~/my_project > ./my_script.sh ~/my_project/some/path

Más complejo, pero si necesita que se ejecute el directorio del script actual si se ha ejecutado a través de un enlace simbólico (por ejemplo, al instalar scripts a través de homebrew), entonces necesita analizar y seguir el enlace simbólico:

if [[ "$OSTYPE" == *darwin* ]]; then READLINK_CMD=''greadlink'' else READLINK_CMD=''readlink'' fi dot="$(cd "$(dirname "$([ -L "$0" ] && $READLINK_CMD -f "$0" || echo "$0")")"; pwd)"

Más complejo y más requisitos para que funcione (por ejemplo, tener instalado un enlace de lectura compatible con el GNU), así que tiendo a no usarlo tanto. Solo cuando estoy seguro de que lo necesito, como instalar un comando a través de homebrew.


con " dirname $0 " puede obtener una ruta dinámica hasta la ejecución actual. por ejemplo: su archivo se ubica en la carpeta del shell, el nombre del archivo es xyz y hay un archivo anthor abc para incluir en el archivo xyz. así que ponlo en el archivo xyz LIke:

php "`dirname $0`"/abc.php


wd=`pwd` new_path="$wd/some/path"