画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

時間のかかるコマンドの実行が終了した時にディスプレイに通知する

10秒とか20秒とか1分とか時間のかかるコマンドを実行する事はしばしばある。 この間ずっとiterm2を目視しているわけにもいかず、何か別の事をする。しかし別の事をしていると、コマンドが終わった時に気が付けない。10秒くらいで終わるコマンドを実行しているのに、気がついたら5分くらい別の事をしてた。なんてあるあるだ。

なのでコマンドの実行が終わったら通知して欲しい。

探したらいいのを見つけた。

qiita.com

そして、参考サイトのコピペするだけで動いた!

function notify_precmd {
    prev_command_status=$?

    if [[ "$TTYIDLE" -gt 1 ]]; then
        notify_title=$([ "$prev_command_status" -eq 0 ] && echo "Command succeeded \U1F646" || echo "Command failed \U1F645")
        osascript -e "display notification \"$prev_command\" with title \"$notify_title\""
    fi
}

function store_command {
  prev_command=$2
}

autoload -Uz add-zsh-hook
add-zsh-hook preexec store_command
add-zsh-hook precmd notify_precmd

さらに、これのいいところは、1秒より長いコマンドを実行した時には自動的に実行してくれるので、短いコマンドで無駄に通知されることもない。 これでちょっと便利になったー。

[追記] 実際にしばらく使ってみてはいるが、たまに通知してくれない時もあるようだ。。。