Tytuł powinien mówić wszystko. Szukam odpowiednika ${BASH_SOURCE[0]}
w zsh.
Uwaga: Trzymam znalezieniu „$0
jest równoważna ${BASH_SOURCE[0]}
” w całym internecie, ale to wydaje się być fałszywa: $0
wydaje się być nazwa polecenia wykonującego. (Jest to argv[0]
, co ma sens.) Wyrażenie 0 USD w moim skrypcie (.zshrc
) daje zsh
dla $0
, co nie jest tym samym, co ${BASH_SOURCE[0]}
. W rzeczywistości, ${BASH_SOURCE[0]}
wydaje się działać w zsh
, z wyjątkiem plików wewnątrz .zshrc
.
Co ja naprawdę robi w moim .zshrc
(który nie działa):
echo ${BASH_SOURCE[0]}
source `dirname $0`/common-shell-rc.sh
źródło awarii ($0
jest zsh
) i echo
wysyła pustą linię.
Edit:
widocznie dla
Jest widocznie włączony, chyba że ustawisz $0
do pracy, muszę opcja
FUNCTION_ARGZERO
ustawionej opcji. Jakikolwiek sposób sprawdzić, czy jest ustawiony w skrypcie? (tak, że mogę go tymczasowo ustawić)
nofunction_argzero
i jest on włączony w mojej powłoce. Nadal nic nie dostaje dla $0
. (Myślę, że b/c nie jestem w funkcji.)
Nadal nie jestem pewien, czy to jest poprawne. Utwórz te dwa pliki: 'foo' zawierające' source./Foo2' i 'foo2' zawierające' echo $ 0'. Teraz uruchom './Foo', a otrzymasz wynik'./Foo', który jest * nie * nazwą skryptu źródłowego. Zastąp '$ 0'' $ {BASH_SOURCE [0]} ', ponownie uruchom z bash, a otrzymasz'./Foo2'. – Thanatos
@Thanatos Otrzymuję './Foo2' (zsh 4.3.10, może się to w pewnym momencie zmieniło, ale nie od 4.0). W porównaniu z twoimi instrukcjami dodałem '#!/Bin/zsh' na górze' foo', aby uruchomić skrypt pod zsh. Czy na pewno używasz 'foo' pod zsh? – Gilles
Tylko dla wyjaśnienia i podkreślenia ... W ** 'zsh' ** (i prawdopodobnie innych powłokach), wartość' 0 $' jest skryptem źródłowym, a nie skryptem wywołującym. To NIE działa w Bash. Tak więc '$ 0' w zsh jest takie samo jak' $ {BASH_SOURCE [0]} 'w Bashu. – toxalot