私はいくつかの仕事をするスクリプトを持っています。これは適切な方法で行いますが、終了するまでにはしばらく時間がかかります。私は "ジョブが今実行中"であることをシミュレートしたいので、私はスピナーカーソルアニメーションを追加しました。シェルスクリプトでCtrl + Cを押したときにプロセスをキャンセルするにはどうすればいいですか?
私はその後、私は変数にその関数のPIDを割り当てて、すべてが行われたときに、私は単純にアニメーションを停止するためにそれを殺す、私のスクリプトの先頭にそれを呼び出します。
#!/bin/bash
spinner &
SPINNER_PID=$!
# a lot of stuff going on here...
# takes some time to finish
kill $SPINNER_PID &>/dev/null
printf "All done"
関数の定義:私は中断しない場合
spinner() {
local i sp n
sp='/-\|'
n=${#sp}
while sleep 0.1; do
printf "%s\b" "${sp:i++%n:1}"
done
}
すべてが正常に動作します。
は私がControl+C
を呼び出すことによって、私の長いタスクをキャンセルすることを想像してみてください。これはキャンセルされますが、スピナーはまだ無限ループであることに気付いているので、明らかにアニメーション化されます。スクリプトを手動でキャンセルされ、kill $SPINNER_PID &>/dev/null
に達しないとき、私はそれを殺すことができますどのように
?
パーフェクト!ありがとうございました。私はこの問題を解決しました。 – slick
大歓迎です! – frenchDolphin