Zobacz: BASH FAQ wpis nr 28: „Jak określić lokalizację mojego skryptu? Chcę czytać niektóre pliki konfiguracyjne z tego samego miejsca”.
Żadne rozwiązanie nie będzie działać w 100% przypadków:
Należy zdać sobie sprawę, że w ogólnym przypadku ten problem nie ma rozwiązania. Każde podejście, o którym być może słyszałeś, i każde podejście, które zostanie szczegółowo opisane poniżej, ma wady i będzie działać tylko w określonych przypadkach. Przede wszystkim staraj się całkowicie uniknąć problemu, nie polegając na lokalizacji skryptu!
Jeśli musisz napisać bardzo wielokrotnego użytku, narzędzia, a następnie biorąc poprawną ścieżkę jako parametr do skryptu będzie najbardziej wiarygodna metoda .
Zakładając, że twój skrypt będzie uruchamiany tylko z pewnych powłok i tylko przy wymaganej odrobinie elastyczności, prawdopodobnie możesz złagodzić tę paranoję. Nadal dobrze jest spojrzeć na swoje opcje. Istnieją wspólne wzorce, których ludzie używają, a które są szczególnie problematyczne.
W szczególności FAQ zaleca unikanie bardzo często używanej $0
zmiennej:
Nic, co czyta $0
, nigdy nie będzie kuloodporne, ponieważ $0
samo w sobie jest zawodne.
Zamiast tego możesz użyć $BASH_SOURCE
. Coś takiego:
source "${BASH_SOURCE%/*}/act.conf.sh"
Rozwiązanie to ma też pewne zastrzeżenia. Zajrzyj na stronę z często zadawanymi pytaniami, aby zobaczyć kompromisy między różnymi rozwiązaniami. Wydaje się, że zalecają cd
w połączeniu z $BASH_SOURCE
w przypadkach, w których będzie to działać dla Ciebie, ponieważ pojawia się przydatny błąd, gdy nie rozwija się prawidłowo.
readlink
. Nie byłem w stanie określić słów kluczowych do wyszukania, więc opublikowałem tutaj pytanie ...