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?


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:



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.


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.

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.