Wie führe ich ein Skript von einem anderen Pfad aus aus und kenne den Pfad des Skripts?

8

Ich muss ein Skript ausführen, das auf eine Datei im selben Pfad zugreift, in dem sie sich befindet.

Zum Beispiel: Ich habe das Skript in /home/me/folder/script.shund dieses Skript greift auf die Datei zu /home/me/folder/myfile. Da sich die Datei im selben Pfad des Skripts befindet, verwende ich nur den Namen myfileund nicht den vollständigen Pfad.

Aber wenn ich es laufen lasse /tmp/, wie:

/tmp$ /home/me/folder/script.sh

es gibt mir:

myfile: No such file or directory

Wie kann ich im Skript sagen, dass sich die Datei auf demselben Pfad befindet wie das Skript selbst?

Tom Brito
quelle
Können Sie zeigen, wie myfile hier verwendet wird?
Faheem Mitha
@Faheem Mitha: ist nur ein weiteres Skript, das meine script.sh aufruft.
Tom Brito
Aus irgendeinem Grund möchten Sie nicht den vollständigen Pfad verwenden oder beide in Ihren PFAD verschieben?
Faheem Mitha
1
@Faheem Mitha: Ich möchte diesen Ordner mit den Skripten an einen anderen Ort verschieben können, vielleicht sogar auf einen anderen Computer, ohne den Pfad von myfile neu schreiben zu müssen.
Tom Brito

Antworten:

8

Wie wäre es $(dirname "$0")/myfile?

Alex
quelle
9

Sie können nicht unter allen Umständen wissen, aber oft (nicht immer), wenn Sie ein Skript nach Pfad ausführen, anstatt die Shell suchen zu lassen $PATH, befindet sich der Pfad zum Skript in $0. Sie können dann dirname "$0"oder verwenden ${0%/*}, um den Pfad zu erhalten.

Geekosaurier
quelle
4

Normalerweise würde ich so etwas am Anfang meines Skripts tun:

SCRIPTDIR=$(dirname "$0")

Oder um den vollständigen Pfadnamen in das Verzeichnis des Skripts zu übertragen (anstelle eines relativen Pfadnamens):

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

Dann verweisen Sie einfach ${SCRIPTDIR}wo nötig.

Richard Downer
quelle