Wie führe ich ein Skript aus, das sich im selben Verzeichnis wie das aktuelle Skript befindet?

11

Warum sind Shell-Skripte so schwer zu entwickeln? In NodeJS könnte ich einfach tun:

require('./script')

und es wird immer ein Skript relativ zum aktuellen Skript erforderlich sein. Aber wenn ich das in Shell / Bash versuche:

./script.sh

Es wird nach einem Skript relativ zu cwd( pwd) gesucht. Der Punkt bedeutet cwd( pwd) und nicht das Verzeichnis, in dem sich das aktuelle Skript befindet, wie ich es erwartet hatte.

line 8: ./script.sh: No such file or directory

Wie führe ich ein Skript relativ zu dem Verzeichnis aus, in dem sich das aktuell ausgeführte Skript befindet?

Ich habe versucht

/bin/bash script.sh

aber Fehler bekommen:

/bin/bash: script.sh: No such file or directory

Dann versucht

script.sh

Habe diesen Fehler

line 8: script.sh: command not found

Nur die folgende Lösung hat gut funktioniert, aber das Problem ist, dass sie nicht lesbar ist:

$("$(dirname "$(realpath "$0")")/script.sh")
happy_marmoset
quelle

Antworten:

11

Eine andere Variante, um das Skriptverzeichnis zu erhalten:

DIR="$(cd "$(dirname "$0")" && pwd)"

dann können Sie Skript mit aufrufen

$DIR/script.sh
danbst
quelle
6

Leider ist das der richtige Weg.

Eine andere Möglichkeit (die ich bevorzuge) besteht darin, am Anfang Ihrer Skripte wie folgt in das aktuelle Verzeichnis zu cd:

cd $(dirname $0)
Mikael Kjær
quelle