如何在 Mac 雙擊執行Shell Script

雖然 macOS 一樣有 bash 並且支援 shell script,不過與 Linux 的桌面環境還是有些許的不同,下面就來講一下怎樣在 macOS 裡用滑鼠點兩下來執行 shell script。

更改副檔名

macOS 的 bash 一樣是認 xxx.sh 的副檔名,不過要在 macOS 的桌面環境中用滑鼠執行,必須將副檔名從 .sh 改為 .command

也別忘了用 chmod +x 幫 script 加上可執行的權限。

設定自動關閉

將 shell script 的副檔名改成 .command 就可以用滑鼠雙擊執行,但執行完後 terminal 的視窗並不會自動關閉,這時必須到「終端機」→「偏好設定」,在描述檔設定中的 「Shell」 頁籤裡,找到「當 shell 結束時」的選項,可以設定 shell script 執行完後的動作,在這裡改成「Shell 完全結束時才關閉視窗」,這樣跑完 script 就不用手動關閉 terminal 視窗了。

設定切換至當前目錄

macOS 有個很特殊的地方,那就是它 shell script 的當前工作目錄,一定會是使用者的 home 目錄,而不是 scritp 所在的目錄

以一個簡單的 script,test.command 為例:

#!/bin/bash

mkdir hihi

如果將 test.command 放到使用者的桌面 ~/Desktop,並且雙擊執行,按照 Linux 的經驗,應該會在使用者的桌面上建立一個名為 hihi 的資料夾。

但如同上面所述,macOS 的 shell script 會將 home 目錄當成預設的工作目錄,因此 hihi 資料夾會被建立在使用者的 home 目錄 ~/ 裡,而非 scritp 所在的使用者桌面 ~/Desktop

如果 script 裡用到的都是一些絕對路徑的話可能沒差,不過蠻多時候我們是用 script 處理所在目錄的東西,因此這邊要在 script 裡加入下面兩種指令(二擇一就好),讓 script 切換到它的所在目錄

cd -- "$(dirname "$BASH_SOURCE")"
cd -- "$(dirname "$0")"


只要將上面任何一條指令加到 script 的 #!/bin/bash 下面即可,寫法如下:

#!/bin/bash

cd -- "$(dirname "$BASH_SOURCE")"

mkdir hihi
#!/bin/bash

cd -- "$(dirname "$0")"

mkdir hihi

參考資料:

How to run a shell script in OS X by double-clicking?

wade Written by:

本站站長