hogashi.*

日記から何から

実行したコマンドの終了をmacの通知で知らせるbash関数

 実行したコマンドが終わったことを、 mac の通知で知らせる bash 関数を書いた。実は関数だけではできなかったので、 alias との組み合わせ。

$ heavycommand --bigoption
...
# 終了時に終了ステータスとコマンド文字列が入った通知が出る:
#   0 : "heavycommand --bigoption"

gist.github.com

説明

 長いことかかるコマンドが終わったことを、他の作業をしていても気付けるように mac の通知で知らせる。すぐに終わるコマンドでも同様に通知が出て嬉しい。
 terminal-notifier というツールがあり、タイトルとかメッセージとかを指定すると通知として出る。これに、実行したコマンド自体の文字列と、実行した結果の終了コードを渡す。
 実行するコマンド自体の文字列を取るのが意外と難しくて、単純に関数の引数として取ったりすると、 alias とかが解決されていなくて、関数内で exec とかしても実行できない場合がある。ので、 alias を使って、 $READLINE_LINE を取る。これは bash の機能による変数のようで、プロンプトの後に打ち込んでいる最中の文字列がセットされる (reverse-search のカスタムに使ったりする)。これを参照すると、 alias や !$ のような bash の機能でのコマンド入力が、解決された状態で取れる。

  • nt: $READLINE_LINE でコマンド文字列を取り、関数_ntに渡す
  • _nt: 渡された文字列を実行して、終了コードを取り、文字列と一緒に通知する

 ntdosome は、頻出長大コマンドの簡略 alias の例。環境変数は、 ntの前でセットする。