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")

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

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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.