事の発端
シェルで実行に長時間掛かる処理などを実行した時に、カンタンに実行終了を通知で把握できるようにしたかった。
notify-send
を利用して手軽にと思い、 下記のような関数によるコマンド実行なども試してみたが、
関数内でコマンド実行された場合にはコマンド内のエイリアスが展開されず意図通りに実行できなかったり、Y/n
などのプロンプト入力を求められた際には失敗など、今まで何気なく叩いていたコマンドに付けるだけで実現できるようなものではなく、最終的に断念した。
xargsやパイプなどでの実現も試みたが、xargsでも(できないこともないが)エイリアスを利用するのが難しく、もっと手軽な方法がないかと試行錯誤してみた。
コマンド終了時に通知を出す方法
下記のような関数を.zshrcに書いて、
function n() { if [ $? -eq 0 ]; then notify-send -u normal "Finished." else notify-send -u critical "Error occurred." fi }
$ <長い処理時間のコマンド>;n
でOK.
試しに sleep 10;n
した結果がこちら。
前の処理が失敗したら通知内容が(最低限だが)失敗したことが分かる。
この方法であれば、 通常のコマンド記述後に ;n
とタイプするだけでよく、プロンプトが表示されたとしても問題がない。
今までのターミナル生活にほぼ変わらない形で組み込める。
最終的には実行したコマンドや標準出力結果も通知上に出したいのだが、当初の目的はこれで達成できるため、当面はこれで運用する。