Consulte: Entrada n.º 28 de las preguntas frecuentes de BASH: "¿Cómo determino la ubicación de mi script? Quiero leer algunos archivos de configuración desde el mismo lugar".
Cualquier solución no va a funcionar el 100% del tiempo:
Es importante darse cuenta de que, en el caso general, este problema no tiene solución. Cualquier enfoque del que haya oído hablar, y cualquier enfoque que se detalla a continuación, tiene fallas y solo funcionará en casos específicos. En primer lugar, intente evitar el problema por completo al no depender de la ubicación de su script.
Si necesita escribir una herramienta muy reutilizable, entonces tomar la ruta correcta como parámetro para su script será el método más confiable .
Suponiendo que su script solo se ejecutará desde ciertos shells, y solo con un poco de flexibilidad requerida, probablemente pueda relajar algo de esta paranoia. Todavía es bueno mirar sus opciones. Hay patrones comunes que la gente usa que son particularmente problemáticos.
En particular, las preguntas frecuentes recomiendan evitar la $0
variable de uso muy común :
Nada de lo que lea $0
será a prueba de balas, porque en $0
sí mismo no es confiable.
Como alternativa, puede usar $BASH_SOURCE
en su lugar. Algo como esto:
source "${BASH_SOURCE%/*}/act.conf.sh"
También hay algunas advertencias en esta solución. Consulte la página de preguntas frecuentes para ver las compensaciones entre las diferentes soluciones. Parece que se recomiendan cd
en combinación con $BASH_SOURCE
en los casos en que funcionará para usted, ya que obtiene una condición de error útil cuando no se expande correctamente.
readlink
. No pude determinar las palabras clave para buscar, así que publiqué la pregunta aquí ....cd "${BASH_SOURCE%/*}" || exit
oread somevar < "${BASH_SOURCE%/*}/etc/somefile"
Link desaconseja rotundamente$0
"Nada que diga $ 0 será a prueba de balas, porque $ 0 en sí mismo no es confiable".Vea esto: Bash: ¿Cómo _mejor_ incluir otros scripts?
Sugiero usar:
fuente
$0
es intrínsecamente defectuoso. Vea la respuesta más votada y aceptada para saber por qué, o simplemente lea mywiki.wooledge.org/BashFAQ/028 : una breve solución para la pregunta es algo así comosource "${BASH_SOURCE%/*}/act.conf.sh"
Intente lo siguiente:
fuente