Kết hợp một số ý tưởng từ các câu trả lời khác cộng với một vài thủ thuật khác, thao tác này sẽ xuất tệp mà không xóa màn hình hoặc cuộn (ngoại trừ chu kỳ đầu tiên nếu lời nhắc ở cuối màn hình).
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
Đó rõ ràng là một cái gì đó bạn sẽ không gõ bằng tay, vì vậy bạn có thể làm cho nó một chức năng mà mất tên tập tin, số giây giữa các cập nhật, bắt đầu dòng và số dòng như các đối số.
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
}
Run nó:
watchit /proc/acpi/battery/BAT1/state .5 0 6
Đối số thứ hai (giây giữa cập nhật) mặc định là 1. (dòng bắt đầu) số thứ ba mặc định là 0.Đối số thứ tư (số dòng) mặc định cho toàn bộ tệp. Nếu bạn bỏ qua số lượng các dòng và tập tin phát triển nó có thể gây ra di chuyển để chứa các dòng mới.
Chỉnh sửa: Tôi đã thêm đối số để kiểm soát tần suất cập nhật.
Nguồn
2011-01-13 10:34:42
bạn đã thử xem chưa? – Rozuur
Tôi chưa từng nhận được lời đề nghị đó trước đây. –
Có rất nhiều câu trả lời đúng cho điều này. Nhờ gabuzo, SiegeX, Jander và Omnifarious. Nhưng người gần nhất với những gì tôi muốn đến từ Dennis Williamson. Cảm ơn tất cả mọi người đã dành thời gian! –