我有一个任务要为我的项目做,我对此主题有点误解。
Objectiv
作为测试,我尝试使用reloadData()
命令模拟的十行内容,持续30秒。
`
ps
#!/bin/bash
test=$(ps -ao pid,pcpu,time,comm | head -n10)
for time in $(seq 1 30); do
echo -ne "$test\r"
sleep 1
test=$(ps -ao pid,pcpu,time,comm | head -n10)
done
之类的东西才能获取正确的光标位置以更新该行,我对一行没问题,但对于十行我完全迷失了。echo -e " text area \033\r"
,但我发现我对此问题有误。注意:该示例不是我的任务,但这代表了我现在面临的挑战
感谢您的时间。
答案 0 :(得分:1)
最简单,最可移植且最稳定的解决方案是在每次迭代时清除屏幕:
#!/bin/bash
for i in {1..30} ; do
clear
# Print several lines
printf "foo %d\n" "${i}"
printf "bar %d\n" "${i}"
sleep 1
done
或者,您可以使用以下顺序:
# Save the cursor position
printf "\033[s"
# Print two empty dummy lines
printf "\n\n"
for i in {1..30} ; do
# Delete the last two lines
printf "\033[2K"
# Restore the cursor position
printf "\033[u"
# Print two lines
printf "foo ${i}\n"
printf "bar ${i}\n"
sleep 1
done
请注意,上述^^^解决方案仅在事先知道要打印/清除的行数时才有效。
答案 1 :(得分:0)
您可以使用echo -e "\e[nA"
向上n行(n
应该是整数)。如果所有行的长度都相同,则执行以下操作。
lines=10
for i in {0..30}; do
ps -ao pid,pcpu,time,comm | head -n${lines} # print `$lines` lines
sleep 1
echo -e "\e[$((${lines}+1))A" # go `$lines + 1` up
done