bash - tiene - shell script linux español
¿Qué significa en shell cuando ponemos un comando dentro de signo de dólar y paréntesis: $(comando) (2)
El uso de $
like ${HOME}
da el valor de HOME. El uso de $
like $(echo foo)
significa ejecutar lo que esté dentro de los paréntesis en una subshell y devolverlo como valor. En mi ejemplo, obtendrías foo
ya que echo
escribirá foo
a la salida estándar
Solo quiero entender la siguiente línea de código en shell. Se utiliza para obtener el directorio de trabajo actual. Soy consciente de que el nombre $(variable)
devuelve el valor dentro del nombre de la variable, pero ¿qué se supone que devuelve $(command)
? ¿Devuelve el valor después de ejecutar el comando? En ese caso, podemos usar `
para ejecutar el comando.
CWD="$(cd "$(dirname $0)"; pwd)"
La misma salida puede tomarse de la siguiente línea de código también en diferentes versiones de shell
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
No puedo entender el significado de $(cd..
y $(dirname
.
¿Alguien podría ayudarme a averiguar cómo se ejecuta este comando?
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Could anybody help me to figure out how this command get executed?
Veamos diferentes partes del comando. BASH_SOURCE
es una variable de matriz bash que contiene nombres de archivos de origen. Entonces "${BASH_SOURCE[0]}"
te devolverá el nombre del archivo de script.
dirname
es una utilidad proporcionada por GNU coreutils que elimina el último componente del nombre de archivo. Por lo tanto, si ejecuta su script diciendo bash foo
, "$( dirname "${BASH_SOURCE[0]}" )"
devolverá .
. Si bash ../foo
, volvería ..
; para bash /some/path/foo
devolvería /some/path
.
Finalmente, el comando completo "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
obtiene el directorio absoluto que contiene el script que se está invocando.
$(...)
permite la sustitución de comandos, es decir, permite que la salida de un comando reemplace el comando en sí y se pueda anidar.