Shell Script (Bash / KSH): 20 секунд, чтобы прочитать переменную

StackOverflow https://stackoverflow.com/questions/3786414

Вопрос

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

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

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

Спасибо!

Это было полезно?

Решение

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

Другие советы

От man ksh:

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

Я не уверен, работает ли это с read в ksh на Solaris. Это работает с 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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top