2011-01-08 4 views
3

У меня есть следующий сценарий Bash. Как я могу сделать паузу при нажатии или паузе после нескольких циклов, но если я не нажимаю ни одну клавишу, она должна зацикливаться?Pause Bash loop

for i in `cat files` 
do 
    echo $i 
done 

ответ

4

Я думаю, что изначально неправильно сформулировал ваш вопрос. Вы можете приостановить активный процесс в любое время, нажав Ctrl+Z и возобновить его с помощью встроенного fg.

Для того, чтобы сделать паузу сценария после того, как число итераций было выполнено, вы можете использовать переменную-счетчик и оператор modulo%:

i=1 
for f in `cat files`; do 
    echo $f 
    if ((i % 10 == 0)); then # pause every 10 iterations 
     read 
    fi 
    let "i++" 
done 

Мой первоначальный ответ был:

Вы можете использовать встроенный встроенный корпус read, пока пользователь не нажмет клавишу RETURN (или клавишу EOF, Ctrl+D):

for i in `cat files` 
do 
    echo $i 
    read 
done 

Вы можете использовать -t вариант read в порядке иметь это время, и продолжить выполнение:

for i in `cat files` 
do 
    echo $i 
    read -t 1 
done 

выше возобновит выполнение через 1 секунду, если пользователь не нажмет клавишу RETURN ,

+0

это заставляет сценарий ждать любой клавиши, чтобы начать каждую цепочку-галочку – newmusicblog

+0

@newmusicblog, нет, не будет. Опять же, вы просто добавили это требование к своему вопросу :) –

+0

, если я использую этот скрипт, он только перекликается с одной переменной, а затем ждет ||| я нуждаюсь в ней, чтобы зацикливаться до тех пор, пока я не надавливаю на паузу – newmusicblog