So geben Sie den aktuellen Speicherort einer Batchdatei (.command) in Mac OS X an

So geben Sie den aktuellen Speicherort einer Batchdatei (.command) in Mac OS X an

Ich habe eine Batchdatei (.command), auf die ich doppelklicke, um zu arbeiten. Sie ist von Dateien im selben Ordner abhängig, aber wenn ich auf die .command-Datei doppelklicke, wird sie einfach gestartet und nimmt an, dass der aktuelle Speicherort /~ ist.

Wie finde/gebe ich den Speicherort der .command-Datei im Skript selbst an, damit ich auf relative Assets verweisen kann?

Antwort1

Wenn Sie Bash verwenden (d. h. das Skript beginnt mit #!/bin/bash), können Sie mit $BASH_SOURCE den Dateinamen des Skripts abrufen. Daraus können Sie das Verzeichnis ermitteln, in dem es sich befindet:

mydir="$(dirname "$BASH_SOURCE")"

… und verwenden Sie es dann, um Dateien relativ zum Skript zu finden, z. B. cp "$mydir/fileInTheSameFolder" /tmp(und setzen Sie es bitte immer in Anführungszeichen, so wie ich es hier getan habe).

Beachten Sie, dass dies ein relativer Pfad sein kann. Wenn das Skript beispielsweise von einer interaktiven Shell mit ausgeführt wurde ./scriptname.command, wird nur „.“ ausgegeben. Dies sollte kein Problem sein, sofern sich das Skript nicht woanders befindet. Wenn Sie jedoch den vollständigen Pfad benötigen, können Sie stattdessen Folgendes verwenden:

mydir="$(cd "$(dirname "$BASH_SOURCE")" && pwd)" || {
    echo "Error getting script directory" >&2
    exit 1
}

Oder Sie fügen einfach cddas Verzeichnis des Skripts am Anfang des Skripts ein:

cd "$(dirname "$BASH_SOURCE")" || {
    echo "Error getting script directory" >&2
    exit 1
}

verwandte Informationen