Alte Frage, aber eine zeitlose.
Die Lösung, die ich immer wieder gesehen habe, besteht darin, ein $HOME/bin
Verzeichnis zu haben und es zuerst einzutragen $PATH
(über, ~/.bashrc
falls es noch nicht vorhanden ist; auf einigen Systemen ~/bin
ist es $PATH
standardmäß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_SOURCE
verwendet. $BASH_SOURCE
enthä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/bin
erste 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/script
Quelle dient ! Sie benötigen den Zeitraum überhaupt nicht, wenn Sie ihn nur ausführen möchten.