Alte Frage, aber eine zeitlose.
Die Lösung, die ich immer wieder gesehen habe, besteht darin, ein $HOME/binVerzeichnis zu haben und es zuerst einzutragen $PATH(über, ~/.bashrcfalls es noch nicht vorhanden ist; auf einigen Systemen ~/binist es $PATHstandardmäßig das erste ). Das Ablegen von Skripten zur Ausführung oder von Symlinks zu Skripten / ausführbaren Dateien an anderer Stelle ist die einfache Möglichkeit, Pfadprobleme zu beheben, die das System oder andere Benutzer nicht betreffen sollten.
Wenn ein Skript zusätzliche Ressourcen benötigt, die relativ zu seinem eigenen Speicherort gefunden werden können (nicht ungewöhnlich), wird die envvar $BASH_SOURCEverwendet. $BASH_SOURCEenthält immer den absoluten Pfad zum aktuell ausgeführten Skript selbst, unabhängig vom Wert von $PWD.
Folgendes berücksichtigen:
ceverett@burrito:~$ echo $PATH
/home/ceverett/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Wir können also sehen, dass dies der $HOME/binerste ist $PATH, und alles, was ich eingebe ~/bin, läuft. Ich habe ein Demonstrationsskript namens ~/bin/findme:
#!/bin/bash
echo "Running from $BASH_SOURCE"
Dies kann verwendet werden, um den absoluten Pfad zum Speicherort des laufenden Skripts abzurufen.
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/scriptQuelle dient ! Sie benötigen den Zeitraum überhaupt nicht, wenn Sie ihn nur ausführen möchten.