通知スクリプトを強化しようとしています。スクリプトが機能する方法は、長時間実行されるシェルコマンドの背後にスクリプトを配置し、長時間実行されるスクリプトが終了した後にあらゆる種類の通知が呼び出されるようにすることです。
例えば:
sleep 100; my_notify
長時間実行されているスクリプトの終了コードを取得すると便利です。問題は、呼び出しによって、変数my_notify
にアクセスできない新しいプロセスが作成されることです。$?
比較:
~ $: ls nonexisting_file; echo "exit code: $?"; echo "PPID: $PPID"
ls: nonexisting_file: No such file or directory
exit code: 1
PPID: 6203
対。
~ $: ls nonexisting_file; my_notify
ls: nonexisting_file: No such file or directory
exit code: 0
PPID: 6205
my_notify
スクリプトには次のものが含まれています。
#!/bin/sh
echo "exit code: $?"
echo "PPID: $PPID"
コマンドの構造をあまり変更せずに、前のコマンドの終了コードを取得する方法を探しています。time
たとえば、問題が解決するように変更すると、問題が解決するという事実を認識していますが、my_notify longrunning_command...
実際には、コマンドの最後でそれに取り組むことができ、この2番目の解決策の複雑さを恐れています。
これを行うことはできますか、それともシェルの動作方法と根本的に互換性がありませんか?
私のシェルはZシェル(zsh
)ですが、Bashでも動作するようにしたいと思います。