我有一個批次檔(.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
}