Bash タイムアウトに対する特別な操作の実行

Bash タイムアウトに対する特別な操作の実行

bashこの質問はssh、noまたは他のツールにのみ関連しています。

タイムアウトだけを検出したいですbash。タイムアウトだけを検出したいです。いいえ他の終了条件(exitEOFまたは^D信号によって終了)に興味があります。

タイムアウト変数を設定する場合:

$ TMOUT=10

タイムアウトが発生すると、以下が表示されます。

$ timed out waiting for input: auto-logout

これはbash実装に示すように別々に配置されます。ここ

ただし、コンソールメッセージ以外にタイムアウトが発生したかどうかを検出する方法が見つかりませんでした。次のコードを試しました。

export TMOUT=10

function handle-termination {
    local retvalue=$1
    echo "retvalue=$retvalue"
    env > /tmp/env
    if [ "$retvalue" = "$(kill -l ALRM)" ] ; then
        echo "Timeout"
    else
        echo "Exit"
    fi
}

trap 'handle-termination $?' EXIT

$?タイムアウトのリターンコードが表示を提供することを望んでいますが、タイムアウトか0信号EXITをトリガーする手動シャットダウンでも常にそうです。

bashセッションタイムアウトを確実に検出する方法はありますか?

ベストアンサー1

関数に「タイムアウトカウンタ」を書くことができ、これが最初に完了するとスクリプトは終了し、そうでなければ関数自体は終了します。

run_tout_counter() {
    sleep 10 & wait
    echo timeout
    rm /tmp/toutPID
    kill -s SIGINT $processPID
}
export processPID=$$
run_tout_counter &  echo $! > /tmp/toutPID

read -p "type input:" A &&  ps $(cat /tmp/toutPID)  >/dev/null

excode=$?
if [[ $excode == 0 ]] ; then kill -s SIGINT $(cat /tmp/toutPID)  ; fi && rm /tmp/toutPID

おすすめ記事