Pytanie starożytne, ale ponadczasowe.
Rozwiązaniem, które konsekwentnie widziałem, jest posiadanie $HOME/bin
katalogu i umieszczanie go na pierwszym miejscu $PATH
(poprzez, ~/.bashrc
jeśli jeszcze go nie ma; w niektórych systemach ~/bin
jest on $PATH
domyślnie pierwszy ). Upuszczenie tam skryptów do wykonania lub dowiązań symbolicznych do skryptów / plików wykonywalnych w innym miejscu jest prostym sposobem radzenia sobie z problemami ze ścieżką, które nie powinny mieć wpływu na system ani innych użytkowników.
Jeśli skrypt wymaga dodatkowych zasobów, które można znaleźć w stosunku do jego własnej lokalizacji (nierzadko), wówczas używana $BASH_SOURCE
jest envvar . $BASH_SOURCE
zawsze zawiera bezwzględną ścieżkę do aktualnie uruchomionego skryptu, niezależnie od wartości $PWD
.
Rozważ następujące:
ceverett@burrito:~$ echo $PATH
/home/ceverett/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Widzimy, że $HOME/bin
to pierwsze $PATH
, więc wszystko, co wprowadzę, ~/bin
będzie działać. Mam skrypt demonstracyjny o nazwie ~/bin/findme
:
#!/bin/bash
echo "Running from $BASH_SOURCE"
Można tego użyć, aby uzyskać bezwzględną ścieżkę do lokalizacji uruchomionego skryptu.
ceverett@burrito:~$ findme
Running from /home/ceverett/bin/findme
ceverett@burrito:~$ cd foo
ceverett@burrito:~/foo$ findme
Running from /home/ceverett/bin/findme
ceverett@burrito:~/foo$ cd /
ceverett@burrito:/$ findme
Running from /home/ceverett/bin/findme
. /path/to/script
źródłowy ! W ogóle nie potrzebujesz okresu, jeśli chcesz go uruchomić.