Existuje způsob zdroje shell skript, aby zjistil cestu k sobě? Zajímá mě hlavně bash, i když mám několik spolupracovníků, kteří používají tcsh.
Hádám, že zde možná nebudu mít štěstí, protože získávání zdrojů způsobuje, že se příkazy spouštějí v aktuálním shellu, takže $0
je stále vyvoláním aktuálního shellu, nikoli zdrojovým skriptem. Moje nejlepší myšlenka je udělat source $script $script
, takže první poziční parametr obsahuje potřebné informace. Má někdo lepší způsob?
Aby bylo jasno, sourcing skript, nikoli jeho spuštění:
source foo.bash
Přijatá odpověď:
V tcsh
, $_
na začátku skriptu bude obsahovat umístění, pokud byl soubor zdrojem, a $0
obsahuje, pokud byl spuštěn.
#!/bin/tcsh
set sourced=($_)
if ("$sourced" != "") then
echo "sourced $sourced[2]"
endif
if ("$0" != "tcsh") then
echo "run $0"
endif
V Bash:
#!/bin/bash
[[ $0 != $BASH_SOURCE ]] && echo "Script is being sourced" || echo "Script is being run"
Jak inline rozbalit zástupný znak v Bash?
Bash:Bezpečné procedurální použití funkce Najít do výběru?