BASH 機能はユーザー入力を読み取るか、タイムアウトで中断します。

BASH 機能はユーザー入力を読み取るか、タイムアウトで中断します。

プログラム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.'

おすすめ記事