如何在 Mac OS X 中指定批次 (.command) 檔案的目前位置

如何在 Mac OS X 中指定批次 (.command) 檔案的目前位置

我有一個批次檔(.command),雙擊它即可完成工作。它依賴於同一資料夾中的文件,但如果我雙擊 .command 文件,它就會啟動並假設當前位置是 /~

如何在腳本本身中尋找/指定 .command 檔案的位置,以便我可以引用相關資源?

答案1

如果您使用的是 bash(即腳本以 開頭#!/bin/bash),則可以使用 $BASH_SOURCE 來取得腳本的檔案名稱。從那裡,您可以獲得它所在的目錄:

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

....然後使用它來查找與腳本相關的文件,例如cp "$mydir/fileInTheSameFolder" /tmp(並且請始終在其周圍使用雙引號,就像我在這裡所做的那樣)。

請注意,這可能是相對路徑;例如,如果腳本是從互動式 shell 運行的./scriptname.command,則它只會顯示為「.」。這應該不是問題,除非腳本 cd 在其他地方,但如果您需要完整路徑,您可以使用它:

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

或者,可以只cd轉到腳本開頭的腳本目錄:

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

相關內容