長いプロセスを自動化するためにbashスクリプトを作成しました。良い結果。
ただし、sshの切断によってユーザーがcontrol-cを押すか再実行する必要がある場合は、ps -ef | grep myprogramを実行すると、前の実行の残りの部分がまだ実行されていることがわかりました。
問題は、ユーザーに回転する進行状況バーを表示できるように、各ステップの背景を設定するこのコードにあると思います。
<snippet begin>
function progress {
SPIN='-\|/'
# Run the base 64 code in the background
echo $THECOMMAND | base64 -d|bash &
pid=$! # Process Id of the previous running command
i=0
while kill -0 $pid 2>/dev/null
do
i=$(( (i+1) %4 ))
# Print the spinning icon so the user knows the command is running
printf "\r$COMMAND:${SPIN:$i:1}"
sleep .2
done
printf "\r"
}
<snippet end>
Q:エラーを検出したりcontrol-cを使用してバックグラウンドプロセスを終了したりするには、スクリプトにどのコードを追加できますか?
追加情報:ラッパーでスクリプトを実行し、スクリーンセッションで実行しています。
myprogram.sh $1 > >(tee -a /var/tmp/myprogram_install$DATE.log) 2> >(tee -a /var/tmp/myprogram_install$DATE.log >&
ベストアンサー1
1つの方法は次のとおりです。
quit=n
trap 'quit=y' INT
progress() {
SPIN='-\|/'
# Run the base 64 code in the background
echo $THECOMMAND | base64 -d|bash &
pid=$! # Process Id of the previous running command
i=0
while kill -0 $pid 2>/dev/null
do
if [ x"$quit" = xy ]; then
kill $pid
break
fi
i=$(( (i+1) %4 ))
# Print the spinning icon so the user knows the command is running
printf "\r$COMMAND:${SPIN:$i:1}"
sleep .2
done
printf "\r"
}