Ctrlタスクが完了したら、自動的に終了するか+終了をクリックして終了できるインタラクティブツールを実行したいと思いますC。この例では、ツールはecho
と a で構成されますsleep
(したがって、もはや真の対話型ではありません)。
監視が必要なので、これをします。
echo "$(date) Starting!" | tee -a myLog.log; \
echo "I NEED SOME TIME"; \
sleep 10; \
echo "$(date) Ended!" | tee -a myLog.log
ただし、これは+を押していない場合にのみCtrl機能しますC。 +を押すと、最後のエコーは実行されません。
どういうわけか、プロセス全体の「外部」伝播をCtrl防ぐことはできますか?C
sh
FreeBSDで動作します。
答え1
私が正しく理解した場合:
#!/bin/sh
trap catchSigint INT
catchSigint(){
echo
echo "$(date) Interrupted" | tee -a myLog.log
exit 1
}
echo "$(date) Starting!" | tee -a myLog.log
echo "I NEED SOME TIME"
sleep 10
echo "$(date) Ended" | tee -a myLog.log
SIGINTをキャプチャしています(Ctrl+によってトリガされますC)。検出されると、catchSigint は実行を終了し、「中断」を記録します。それ以外の場合は、「終了しました」が記録されます。