Pause Bash loop - PullRequest
       10

Pause Bash loop

3 голосов
/ 08 января 2011

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

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

1 Ответ

4 голосов
/ 08 января 2011

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

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

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

Вы можете использовать опцию -tread, чтобы установить тайм-аут и продолжить выполнение:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...