リモートシェルで長いプロセスを実行しています。プロセスが完了したら通知をトリガーしたいと思います。 この回答 longコマンドはリモートサーバー上にあり、terminal-notifierを呼び出すことができないため、十分ではありません。
ITerm2トリガーを使用することで、希望する結果に近づくことができます。たとえば、リモートサーバーで次を実行し、__ FINISHED__のiTerm2トリガーを設定した場合:
./long_process && echo "\__FINISHED__"
これには、エディターまたはコード(emacsシェルでコードを実行している)でこのコマンドにスクロールバックするたびに通知がトリガーされるという望ましくない機能があります。
1つの解決策は、iTerm2が認識するある種のテキスト通知ですが、それはemacsスクロールバックバッファーには表示されません。
必要な通知の種類やリモートサーバーが実行しているOSを指定していないため、ここでいくつかの仮定を行う必要があります。通知され、リモートサーバーが* nixのフレーバーを実行している限り、通知の種類はあまり気にしないと思います。
自分にメールを送ってください。サーバーでsendmail
が構成されている場合は、次のことができます。
./long_process && echo "Job done" | sendmail [email protected]
ローカルマシンにsshで戻り(これが可能であると仮定して)、それがあなたに話しかけるようにします。 OSXのビープ音を鳴らすもっとクールな方法については、 ここ を参照してください。
./long_process && ssh [email protected] say "Yo! All done"
または
./long_process && ssh [email protected] terminal-notifier -message "Job finished!" -title "Info"
動的IPから接続していて、その動的IPにsshできるようにルーターを構成している場合は、これを行うことができます(現在リモートマシンからのみ接続されています):
ip=$(who | grep $USER | Perl -lne 's/\\((.+?)\\)\s*$//; print "$1"' | tail -n 1) &&
./long_process && ssh you@$ip terminal-notifier -message "Job finished!" -title "Info"
通常の方法 でパスワードなしのsshを設定できます。動的IPの影響を受けないようにする必要があります。これを行うと、上記のコードが機能します。
pushover を使用して、AndroidまたはiOSデバイス(ある場合))に通知を送信します
./long_process && pushover.pl "All done"
リモート端末でecho
ベル-\a
を実行できます:./long_process ; echo -e '\a'
一部のターミナルエミュレータは、ある種のサウンドを再生し、通知を表示する場合があります。特にiTerm2は、プロセスのタブがフォーカスされていない場合、通知を表示してサウンドを再生します。
また、コマンドを区切るために;
を使用したことに注意してください。このようにして、コマンドがゼロ以外のステータスを返した場合でも通知されますが、&&
はコマンドが成功した場合にのみ実行されます。