Объединение нескольких идей из других ответов плюс пара других трюков позволяет вывести файл без очистки экрана или прокрутки (за исключением первого цикла, если подсказка находится внизу экрана).
up=$(tput cuu1)$(tput el); while true; do (IFS=$'\n'; a=($(</proc/acpi/battery/BAT1/state)); echo "${a[*]}"; sleep 1; printf "%.0s$up" ${a[@]}); done
Это, очевидно, то, что вы не наберете вручную, поэтому вы можете сделать это функцией, которая принимает имя файла, количество секунд между обновлениями, начальную строку и количество строк в качестве аргументов.
watchit () {
local up=$(tput cuu1)$(tput el) IFS=$'\n' lines
local start=${3:-0} end
while true
do
lines=($(<"$1"))
end=${4:-${#lines[@]}}
echo "${lines[*]:$start:$end}"
sleep ${2:-1}
# go up and clear each line
printf "%.0s$up" "${lines[@]:$start:$end}"
done
}
Запустите его:
watchit /proc/acpi/battery/BAT1/state .5 0 6
Второй аргумент (секунды между обновлениями) по умолчанию равен 1. Третий аргумент (начальная строка) по умолчанию равен 0. Четвертый аргумент (количество строк) по умолчанию используется для всего файла. Если вы опустите количество строк и файл увеличится, это может привести к прокрутке для размещения новых строк.
Редактировать: Я добавил аргумент для контроля частоты обновлений.