Bash动态命令行输出

时间:2015-07-01 08:42:02

标签: bash

我想知道如何在shell中获得动态输出。我的意思是你得到的那种输出" top"命令或wget下载的状态栏:命令行输出更改,没有任何换行符。

我的特定需求是从脚本获取反馈(这需要大量操作以执行大量操作),而不会为每个操作反馈获取换行符,例如在非常大的网络中发送ping的发现脚本并且可以动态地告知发现的状态。

(不,我不能使用nmap:D,无论如何它是出于学习目的)

谢谢!

2 个答案:

答案 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'