Lo siento si esta es una pregunta estúpida, pero la busqué sin éxito.
¿Qué hace exactamente la segunda línea?
#!/bin/sh
cd ${0%/*} || exit 1
Sé que el primero es el shebang, el segundo intenta cambiar el directorio pero la parte confusa es ${0%/*}
.
¿Me puede explicar esa segunda línea?
command-line
sh
Navaro
fuente
fuente
dirname
comando incorporado como$(dirname $0)
dirname
está integrado? Ciertamente no está en Bash v4.3.11, que es el shell predeterminado en Ubuntu Trusty.dirname
no es un shell incorporado.Respuestas:
${0}
es el primer argumento del guión, es decir, el nombre o la ruta del guión. Si inicia la secuencia de comandos comopath/to/script.sh
, a continuación,${0}
será exactamente esa cadena:path/to/script.sh
.La
%/*
parte modifica el valor de${0}
. Significa: tomar todos los caracteres hasta que/
siga un nombre de archivo. En el ejemplo anterior,${0%/*}
serápath/to
.Puedes verlo en acción en tu shell:
Sh admite muchos otros tipos de "sustitución de parámetros". Aquí está, por ejemplo, cómo tomar el nombre del archivo en lugar de la ruta:
En general,
%
y%%
elimina los sufijos, mientras que#
y##
elimina los prefijos. Puede leer más sobre la sustitución de parámetros .fuente
|| exit 1
podría ser necesario porquecd
podría salir con el estado 2, no 1, por error. Sin embargo, estoy de acuerdo en que no es muy útil (por lo general, a los programas no les importan los estados de salida específicos). ¿Probablemente esto es parte de un script más grande?