我想知道如何在shell中获得动态输出。我的意思是使用“top”命令或wget下载的状态栏获得的输出类型:命令行输出更改而不使用任何换行符。
我的具体需求是从一个脚本获得反馈(这个脚本需要很多操作才能执行),而不必为每个操作获得换行反馈,例如在一个非常大的网络中发送ping的发现脚本,它可以动态地判断发现的状态。
(不,我不能用nmap:D,不管是为了学习)
谢谢!
最佳答案
“动态”显示只是一系列打印语句。其中一些print语句打印屏幕控制代码,这些代码可以移动光标或重新绘制屏幕的某些部分。事实上,这方面的标准框架是ncurses
。要从shell脚本中进行访问,您需要tput
。
下面是一个简单的“动画”微调器。
#!/bin/sh
# Restore cursor and move to new line when terminated
trap 'tput cnorm; echo' EXIT
trap 'exit 127' HUP INT TERM
# Make text cursor invisible
tput civis
# Save cursor position
tput sc
while true; do
for char in '-' '\' '|' '/'; do
# Back to saved position
tput rc
printf "%s" "$char"
sleep 1
done
done