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

dirnamecomando incorporado como$(dirname $0)dirnameestá integrado? Ciertamente no está en Bash v4.3.11, que es el shell predeterminado en Ubuntu Trusty.dirnameno 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 1podría ser necesario porquecdpodrí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?