Shell脚本(bash / ksh):读取变量20秒

时间:2010-09-24 11:07:01

标签: bash unix ksh solaris-10 shell

我需要等待输入20秒,之后myscript应该继续执行 我尝试过使用read -t20 var,但这只适用于bash。我在Solaris 10上使用ksh。

有人能帮助我吗?

编辑:20秒只是一个例子。我们假装它需要等待1个小时。但是这个家伙可以或者不可能在PC前面写输入,他不需要等待1小时输入输入,但是如果他不在PC前面那么shell应该在等待后继续执行一段时间。

谢谢!

2 个答案:

答案 0 :(得分:2)

来自man ksh

  

TMOUT
  如果设置为大于零的值,则在发出PS1提示后,如果未在指定的秒数内输入命令,则shell将终止。 shell可以使用该值的最大边界进行编译,该值不能超过。

我不确定这是否适用于Solaris上的read中的ksh。它适用于ksh93,但该版本也有read -t

This script包含这种方法:

# Start the (potentially blocking) read process in the background

    (read -p && print "$REPLY" > "$Tmp") &  readpid=$!

    # Now start a "watchdog" process that will kill the reader after
    # some time:

    (
        sleep 2; kill $readpid >/dev/null 2>&1 ||
        { sleep 1; kill -1 $readpid >/dev/null 2>&1; } ||
        { sleep 1; kill -9 $readpid; }
    ) &     watchdogpid=$!

    # Now wait for the reading process to terminate. It will terminate
    # reliably, either because the read terminated, or because the
    # "watchdog" process made it terminate.

    wait $readpid

    # Now stop the watchdog:

    kill -9 $watchdogpid >/dev/null 2>&1

    REPLY=TERMINATED            # Assume the worst
    [[ -s $Tmp ]] && read < "$Tmp"

答案 1 :(得分:1)

看看this forum thread它在第三篇文章中有答案。