Pregunta:
¿Hay alguna forma de que un script de shell de origen encuentre la ruta a sí mismo? Me preocupa principalmente bash, aunque tengo algunos compañeros de trabajo que usan tcsh.
Supongo que es posible que no tenga mucha suerte aquí, ya que el abastecimiento hace que los comandos se ejecuten en el shell actual, por lo que $0
sigue siendo la invocación del shell actual, no el script de origen. Mi mejor pensamiento actualmente es hacer source $script $script
, de modo que el primer parámetro posicional contenga la información necesaria. ¿Alguien tiene una mejor manera?
Para ser claros, estoy obteniendo el script, no ejecutándolo:
source foo.bash
Respuesta:
En tcsh
, $_
al principio de la secuencia de comandos contendrá la ubicación si el archivo se obtuvo y $0
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"