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.