2015-09-02 3 views
1

Это цикл, который должен отсчитывать 10 секунд ($rtime). Если вы хотите вырваться из цикла раньше, вам нужно будет ввести n. Могу ли я как-то не дождаться, пока чтение не получит вход, потому что в данный момент цикл всегда застревает при чтении и ждет там для ввода.Shell Script - не дождаться прочитанного

ct=$(date +"%s") 
    while [ $(($ctn - $ct)) -le $rtime ] ; do 
     ctn=$(date +"%s") 
     read r 
     if [ "$r" = "n" ] ; then 
      break 
     fi 
    done 

ответ

1

Вы можете указать тайм-аут, чтобы read:

read -t 1 r 

который заставит его закончить, если ничего не было введено после того, как второй.

+0

Или просто используйте 'read -t $ rtime r' и полностью избегайте цикла здесь (хотя это будет ломаться на любом входе не только' n'. –

+0

Конечно, но вы можете сделать что-то еще в цикле (например, напечатайте обратный отсчет), поэтому я пошел на этот вариант :) – psmears

+0

спасибо за быстрый ответ! да, в цикле есть и другие вещи. :) – TheCheatsrichter