¿Hay alguna manera de que un fuente script de shell para encontrar la ruta a sí mismo? Me preocupa principalmente bash, aunque tengo algunos compañeros de trabajo que usan tcsh.
Supongo que puede que no tenga mucha suerte aquí, ya que el abastecimiento hace que los comandos se ejecuten en el shell actual, así que $0
sigue siendo la invocación del shell actual, no el script de origen. Mi mejor pensamiento actualmente es hacer source $script $script
, para que el primer parámetro posicional contenga la información necesaria. ¿Alguien tiene una mejor manera?
Para ser claros, estoy contratando el script, no ejecutándolo:
source foo.bash
Respuesta aceptada:
En tcsh
, $_
al comienzo de la secuencia de comandos contendrá la ubicación si el archivo se originó y $0
lo contiene si se ejecutó.
#!/bin/tcsh
set sourced=($_)
if ("$sourced" != "") then
echo "sourced $sourced[2]"
endif
if ("$0" != "tcsh") then
echo "run $0"
endif
En Bash:
#!/bin/bash
[[ $0 != $BASH_SOURCE ]] && echo "Script is being sourced" || echo "Script is being run"