No wiec pisze ostatnio troche skryptow w Bashu, i od czasu do czasu musze dowiedziec sie w skrypcie gdzie lezy. Robie to mniej wiecej tak:
ME="$(cd "$(dirname "$0")" && pwd)"
Jednak ostatnio napisalem bash completion (moje skrypty potrafia podpowiadac parametry na wcisniecie tabulatora) no i taki skrypt sie najczesciej 'sourcuje':
. bash_completion.sh
Pech chce, ze w takim skrypcie rowniez musze sie dowiedziec, gdzie on lezy, lecz $0 tutaj jest ustawione na: bash 4.2: "bash", bash 4.1.5: "-bash" (skad ta roznica?), co jest w tym momencie zle. Po wielu poszukiwaniach, czytaniach, probach i bledach mam 2 rozwiazania:
- ME="$(cd "$(dirname "${BASH_ARGV[0]}")" && pwd)"
- ME="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
Pierwsza jest ponoc troche niebezpieczna, poniewaz man bash mowi ze ona BASH_ARGV jest dostepne tylko w 'extended debugging mode' (cokolwiek to jest, u mnie dziala za kazdym razem, ale ok).
Druga jest podobno idealna (na stackoverflow ktos tak powiedzial), jednakze czytajac w man basha o tej zmiennej prawde mowiac nie rozumiem z tego nic.
Czy moglby mi ktos prosze wylozyc jak dla debila, co ta zmienna dokladnie oznacza?