我想知道如何在shell中获得动态输出。我的意思是你得到的那种输出" top"命令或wget下载的状态栏:命令行输出更改,没有任何换行符。
我的特定需求是从脚本获取反馈(这需要大量操作以执行大量操作),而不会为每个操作反馈获取换行符,例如在非常大的网络中发送ping的发现脚本并且可以动态地告知发现的状态。
(不,我不能使用nmap:D,无论如何它是出于学习目的)
谢谢!
答案 0 :(得分:2)
"动态" display只是一系列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
答案 1 :(得分:1)
您可以将光标移动与bash一起使用。有关光标移动,请参阅http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html
如果您想要动态打印日期,可以使用以下内容:
echo -ne '\033[s'; clear ; for i in `seq 10`;do echo -ne '\033[0;0H' ; date;sleep 1;done ;echo -ne '\033[u'