【发布时间】:2016-02-25 04:32:55
【问题描述】:
我一直在尝试同时为一个假装自动化过程的脚本打印一个变量,内容是这个的输出
sed "s/Read/\n/g" /tmp/Air/test.txt | tail -1 test.txt | grep ARP
所以我把它放在一个while循环中
do
out= sed "s/Read/\n/g" /tmp/Air/test.txt | tail -1 test.txt | grep ARP
echo -n "$out"
sleep 1
done
我在这里阅读了其他问题,我尝试使用不同的选项,例如 echo -ne、echo -ne "$out" \r、printf "\r" 或 printf "%s",但没有人运气好,所有其他示例都没有要打印的变量计数器o系统变量
更新
似乎echo -n 在同一行重复$out,如果out="this is a test" 的输出echo -n 是“这是一个测试这是一个测试这是一个测试这是一个测试。 ...”也许我错过了一些选择?
更新 2
对不起,我可能不是很清楚,但我想要的是用 $out 的值覆盖同一行,$out 的源是与脚本一起执行的 aireplay-ng 命令的输出我用
得到输出输出是这样的
102415 packets (got 5 ARP requests and 15438 ACKs), sent 37085 packets...(499 pps)
但是ARP请求的数量是不断变化的
此代码例如使用 echo -ne 并在同一行覆盖
#!/bin/bash
for pc in $(seq 1 100); do
echo -ne "$pc%\033[0K\r"
sleep 1
done
这个输出就像一个百分比指示器,显示“10%”而不是“1% 2% 3% 4% 5% ..”在同一行,我已经尝试过这样但没有运气
【问题讨论】:
-
没有正确回答您的问题,但我假设您可以尝试执行
out=$(sed ...)或只是执行echo $(sed ...),您也可以删除echo,因为grep无论如何都会打印它跨度> -
您能否发布您的整个脚本和输入文件,以便我们找出确切的问题?
-
是一个简单的函数,基本上就是整个代码,输出来自 aireplay-ng 命令,类似于 102415 个数据包(收到 5 个 ARP 请求和 15438 个 ACK),发送了 37085 个数据包。 ..(499 pps)我用普通文本文件和相同的命令运行了一些测试,似乎 echo -n 选项正在工作,但如果文本文件的内容是“这是一个测试” echo -n 显示“这是一个测试这是一个测试这是一个测试......”
-
嗯? “这是一个测试这是一个测试这是一个测试”正是如果你做对了(在一个循环中)它会期望打印的内容:它一遍又一遍地打印相同的内容中间没有换行符。这不是你要的吗?
-
顺便说一句,如果您的字符串中可能存在其他控制字符,请考虑使用
%q而不是%s以人类可读、明确的形式打印它们,而不是像它们一样将它们发送到终端是并让终端解释它们。