Shell Script (bash/ksh): 20 секунд для чтения переменной

Мне нужно ждать ввода в течение 20 секунд, после чего myscript должен продолжить выполнение.
Я пытался использовать read -t20 var однако это работает только на bash. Я использую ksh на Solaris 10.

Может кто-то помочь мне, пожалуйста?

РЕДАКТИРОВАТЬ: 20 секунд это только пример. Давайте представим, что нужно подождать 1 час. Но парень может или не может быть перед ПК, чтобы записать ввод, ему не нужно ждать 1 час, чтобы ввести ввод, но если он не перед ПК, поэтому оболочка должна продолжить выполнение после ожидания на некоторое время.

Спасибо!

2 ответа

Решение

Посмотрите на эту ветку форума, у нее есть ответ в третьем посте.

От man ksh:

TMOUT
Если установлено значение больше нуля, оболочка завершает работу, если команда не введена в течение заданного количества секунд после выдачи приглашения PS1. Оболочка может быть скомпилирована с максимальной границей для этого значения, которая не может быть превышена.

Я не уверен, работает ли это с read в ksh на солярисе. Он работает с ksh93, но эта версия также имеет read -t,

Этот скрипт включает в себя этот подход:

# 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"
Другие вопросы по тегам