シェルスクリプトにタイムアウトを導入する方法は?

シェルスクリプトにタイムアウトを導入する方法は?

永遠に実行できるループを持つシェルスクリプトを実行したいのですが、そのようなことが発生したくありません。したがって、スクリプト全体にタイムアウトを導入する必要があります。

SuSEでシェルスクリプト全体のタイムアウトをどのように導入しますか?

ベストアンサー1

GNUが利用できない場合は、timeout次のものを使用できますexpect(Mac OS X、BSD ...通常、デフォルトではGNUツールとユーティリティはありません)。

################################################################################
# Executes command with a timeout
# Params:
#   $1 timeout in seconds
#   $2 command
# Returns 1 if timed out 0 otherwise
timeout() {

    time=$1

    # start the command in a subshell to avoid problem with pipes
    # (spawn accepts one command)
    command="/bin/sh -c \"$2\""

    expect -c "set echo \"-noecho\"; set timeout $time; spawn -noecho $command; expect timeout { exit 1 } eof { exit 0 }"    

    if [ $? = 1 ] ; then
        echo "Timeout after ${time} seconds"
    fi

}

編集する 例:

timeout 10 "ls ${HOME}"

おすすめ記事