Я хочу выйти из скрипта, если нажата какая-либо клавиша.
#!/bin/sh
while true; do
df -h | head
sleep 10
clear
done
Любое предложение?
Я хочу выйти из скрипта, если нажата какая-либо клавиша.
#!/bin/sh
while true; do
df -h | head
sleep 10
clear
done
Любое предложение?
Заменить sleep 10;
с read -t 10 -n 1 exitwhile; if [ -n "$exitwhile" ]; then break; fi
read -t 10 -n 1 exitwhile
Между тем, 10 секунд ожидает ввода без подтверждения ввода и помещает ввод в переменную exit. если эта переменная не пуста, цикл while прервется.
… Должен быть изменен, потому что он сломается только на символьных клавишах
Вам лучше использовать команду watch
:
watch -n10 'df -h | head'
Используйте Ctrl+c, чтобы остановить команду.
Страница watch
гласит:
watch - периодически запускать программу, показывая вывод в полноэкранном режиме
Это выйдет практически на любую клавишу:
#!/bin/bash
while true; do
{ clear; df -h | head; } </dev/null
read -n 1 -t 10 && break
done; read -t 0.1 -n 1000000
Заметки:
bash
, а не sh
из-за read -n
./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