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"