macでスクリプトをクリックして実行する

ちょっとした作業用にShell Scriptを書いていて、毎回ターミナルから実行していた。

DatabaseをRDSからdumpしてローカルに持ってくる作業で、
毎回タイムスタンプをつけてローカルに格納するのにはスクリプトがちょうどいい。

ただ、クリックしてパッと実行できたらなと思っていた。

.sh ファイルを、.command 拡張子に変えるだけで行けそうだったのでためした。

 

できること

  • シェルスクリプトをダブルクリックするだけで即時実行する
  • Pythonで書かれたスクリプトも即時実行できる

 

やること

  1. ファイル拡張子を.commandに書き換える
  2. 実行権限を与える
$ mv script.sh script.command
$ chmod u+x script.command

これだけでよい。

あとはクリックして実行するだけ。
ターミナルが立ち上がってくれる。

hello.command

 

そして、pythonで書いたコードを実行したいならば、スクリプト内の1行目を書き換えれば良い。

$ which python
/Users/yuki/.pyenv/shims/python
#!/Users/yuki/.pyenv/shims/python

print(f'Hello')

 

注意点がある。

カレントディレクトリの扱いに注意する

単にクリックして実行した場合、ユーザのディレクトリ(~)で実行される。

ので、スクリプトの中で適宜注意すること。
僕の場合、dumpしたファイルが ~ にいてびっくりした。

どちらもクリック時の引数から、.commandファイルの場所がわかる。

Shell Scriptであれば

#!/bin/bash

CWD=$(dirname $0)
echo "I'm in $CWD"

Pythonならば

#!/Users/yuki/.pyenv/shims/python
import os, sys

argcwd = os.path.dirname(sys.argv[0])
print(f"I'm in {argcwd}")

 

Pythonの場合、os.getcwd() があるが、これを試したら ~ になってしまった。