Я хочу выйти из скрипта, если нажата какая-либо клавиша.
#!/bin/sh while true; do df -h | head sleep 10 clear done
Любое предложение?
3 ответа на вопрос
0
kai-dj
Заменить sleep 10;наread -t 10 -n 1 exitwhile; if [ -n "$exitwhile" ]; then break; fi
read -t 10 -n 1 exitwhileожидает ввода в течение 10 секунд без подтверждения нажатием клавиши enter и помещает ввод в переменную exit. если эта переменная не пуста, цикл while прервется.
… Должен быть изменен, потому что он сломается только на символьных клавишах
0
oliv
Вам лучше использовать watchкоманду:
watch -n10 'df -h | head'
Используйте Ctrl+, cчтобы остановить команду.
На watchстранице руководства написано:
watch - периодически запускать программу, показывая вывод в полноэкранном режиме
Вы можете Ctrl + C оригинальный скрипт. Дело в том, чтобы использовать * любой * ключ.
Kamil Maciorowski 5 лет назад
0
Перенаправление от /dev/nullдолжно предотвратить команды, отличные readот исчерпания стандартного ввода ( clearи dfможет не делать этого, но в общем случае команды могут). Таким образом, любой вклад идет в readконце концов.
Финал read- отбросить лишние символы из stdin. Некоторые ключи генерируют более одного символа (исследуйте «escape-последовательности»); Также можно нажимать несколько клавиш во время работы df(или любой другой команды, которую вы хотите использовать). Без финала readэти лишние символы засорят вашу командную строку.
Альтернативный подход, с watch:
#!/bin/bash watch -n 10 df -h & # put to the background read -n 1 kill $! # kill the the job most recently placed into the background read -t 0.1 -n 1000000