Я хочу выйти из скрипта, если нажата какая-либо клавиша.
#!/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