C'è un modo per un proveniente script di shell per scoprire il percorso verso se stesso? Mi occupo principalmente di bash, anche se ho alcuni colleghi che usano tcsh.
Immagino di non avere molta fortuna qui, dal momento che il sourcing fa eseguire i comandi nella shell corrente, quindi $0
è ancora l'invocazione della shell corrente, non lo script di origine. Al momento, il mio pensiero migliore è fare source $script $script
, in modo che il primo parametro posizionale contenga le informazioni necessarie. Qualcuno ha un modo migliore?
Per essere chiari, sto sourcing lo script, non in esecuzione:
source foo.bash
Risposta accettata:
In tcsh
, $_
all'inizio dello script conterrà il percorso se il file è stato originato e $0
lo contiene se è stato eseguito.
#!/bin/tcsh
set sourced=($_)
if ("$sourced" != "") then
echo "sourced $sourced[2]"
endif
if ("$0" != "tcsh") then
echo "run $0"
endif
In Bash:
#!/bin/bash
[[ $0 != $BASH_SOURCE ]] && echo "Script is being sourced" || echo "Script is being run"