Ich habe eine Bash-Skriptdatei, die in einem Verzeichnis abgelegt wird, das zu $PATH hinzugefügt wurde, sodass ich das Skript von jedem Verzeichnis aus aufrufen kann.
Es gibt eine weitere Textdatei im selben Verzeichnis wie das Skript. Ich frage mich, wie ich auf die Textdatei im Skript verweisen soll?
Wenn das Skript beispielsweise nur den Inhalt der Textdatei ausgeben soll, cat textfile
funktioniert nicht, da beim Aufruf des Skripts aus einem anderen Verzeichnis die Textdatei nicht gefunden wird.
Akzeptierte Antwort:
Diese sollten genauso funktionieren, solange es keine symbolischen Links gibt (in der Pfaderweiterung oder im Skript selbst):
-
MYDIR="$(dirname "$(realpath "$0")")"
-
MYDIR="$(dirname "$(which "$0")")"
-
Eine zweistufige Version einer der oben genannten:
MYSELF="$(realpath "$0")"
MYDIR="${MYSELF%/*}"
Wenn es auf dem Weg zu Ihrem Skript einen Symlink gibt, dann which
wird eine Antwort ohne Auflösung dieses Links geben. Wenn realpath
nicht standardmäßig auf Ihrem System installiert ist, können Sie es hier finden.
[BEARBEITEN]: Wie es scheint, ist realpath
hat keinen Vorteil gegenüber readlink -f
von Caleb vorgeschlagen, ist es wahrscheinlich besser, letzteres zu verwenden. Meine Timing-Tests zeigen, dass es tatsächlich schneller ist.