Bash shell脚本更新并打印一个覆盖同一行的变量

时间:2016-02-25 04:32:56

标签: linux bash shell output

我一直在尝试同时打印一个变量,用于假装自动化流程的脚本,内容就是这个的输出

    do
       out= sed "s/Read/\n/g" /tmp/Air/test.txt | tail -1 test.txt | grep ARP
       echo  -n  "$out"
       sleep 1
    done

所以我把它放在一个while循环中

echo -ne

我在这里阅读了其他问题,我尝试使用echo -ne "$out" \rprintf "\r"printf "%s"echo -n这样的不同选项,没有人没有运气,所有其他例子都不要没有变量来打印反制系统变量

更新

似乎$out重复out="this is a test"在同一行,如果echo -n 102415 packets (got 5 ARP requests and 15438 ACKs), sent 37085 packets...(499 pps) 的输出是“这是一个测试,这是一个测试这是一个测试,这是一个测试....“也许我错过了一些选择?

更新2

对不起小姐理解也许我不是很清楚,但我想要的是用$ out的值覆盖同一行,$ out的源是与脚本一起执行的aireplay-ng命令的输出我用

获得输出

输出是这样的

    #!/bin/bash
    for pc in $(seq 1 100); do
       echo -ne "$pc%\033[0K\r"
       sleep 1
    done

但ARP请求的数量不断变化

此代码例如在同一行中使用echo -ne和overwrite

Bitmap

这个输出就像一个百分比指标,显示“10%”,而不是“1%2%3%4%5%..”在同一行,我已经尝试过这样但没有运气

3 个答案:

答案 0 :(得分:0)

首先,您要将错误的bash命令值赋值给变量。

out=$(sed "s/Read/\n/g" /tmp/Air/test.txt | tail -1 test.txt | grep ARP)

然后你可以在写一行时将所有输出打印出来: -

echo -n $out

答案 1 :(得分:0)

如果您尝试执行sed请使用

`sed "s/Read/\n/g" /tmp/Air/test.txt | tail -1 test.txt | grep ARP`

答案 2 :(得分:0)

您问题的最新附录就像您错误传达了您的意图:this is a test this is a test this is a test是您的问题的简单读数表明您要求(打印{{1}毕竟,在一个没有换行符的循环中反复出现,可以预期什么都不做);为什么你会在一个上下文中描述这个,这听起来像一个bug就是令人惊讶的。

如果您想将光标发送回当前行的开头并覆盖该行,则可能如下所示:

this is a test

...打印你的字符串,用空格填充80个字符,然后将光标返回到行的开头,这样你下一个写的东西就会覆盖那个字符串。

当然,如果您打印该行然后返回到shell提示符,则提示符将从同一行的开头开始并覆盖文本,因此请务必使用#!/bin/bash # ^^^^ not /bin/sh; this enables bash extensions # ask the shell to keep $COLUMNS up-to-date shopt -s checkwinsize # defaults to 80-character terminal width, but uses $COLUMNS if available printf "%-${COLUMNS:-80}s\r" "$out"` 进行跟进。 / p>