プログラムaまたはbが完了したら、xを実行するBASH関数を作成しようとしています。
例:
echomessage()
{
echo "here's your message"
if [[sleep 3 || read -p "$*"]]
then
clear
fi
}
この場合:
a = ' sleep 3
'は3秒後にxを実行する必要があります。
b = ' read -p "$*"
'は、キーボード入力が提供されるたびにxを実行する必要があります。
x = ' clear
'プログラムがスリープモードのためにタイムアウトした場合、またはユーザーがキーボードのキーを押すと、エコー出力をクリアします。
答え1
read
利用可能なタイムアウトパラメータがあります。
read -t 3 answer
read
単一文字(デフォルトはフル行+ Enter)を待つには、入力を1文字に制限できます。
read -t 3 -n 1 answer
正しく入力すると戻り値は 0 になるため、次のように確認できます。
if [ $? == 0 ]; then
echo "Your answer is: $answer"
else
echo "Can't wait anymore!"
fi
あなたの場合はバックグラウンドタスクを実装する必要はありませんが、必要に応じて次の例を参照してください。
#!/bin/bash
function ProcessA() {
sleep 1 # do some thing
echo 'A is done'
}
function ProcessB() {
sleep 2 # do some other thing
echo 'B is done'
}
echo "Starting background jobs..."
ProcessA & # spawn process "A"
pid_a=$! # get its PID
ProcessB & # spawn process "B"
pid_b=$! # get its PID too
echo "Waiting... ($pid_a, $pid_b)"
wait # wait for all children to finish
echo 'All done.'