我想用管道输送不打印换行符的程序的输出,因为它使用回车符将其行替换为新内容。
此代码表示我想要检索输出的程序的行为。
#!/usr/bin/env bash
for i in {1..100};do
echo -ne "[ $i% ] long unneeded log\r"
sleep 0.3
done
我希望在bash脚本中实时剪切此输出以仅显示重要信息,
但由于该程序不会打印换行符,因此./program | awk ...
仅在命令结束时显示输出。
我无法修改提供此输出的程序。 (我没有来源,我想与其他用户共享自己的脚本)
我知道我的请求非常具体,但是有一种方法可以按字符而不是按行传递输出字符?
答案 0 :(得分:0)
您可以尝试
<option>
您可以继续使用第三个程序进行管道传输,该程序将每行处理一行。
答案 1 :(得分:0)
由于@OznOg答案和@ Walter-A链接的结合,我找到了它。
实际上是用tr
用换行符替换回车符,
但默认情况下它是缓冲的,stdbuf可以用stdbuf -o0
对其进行缓冲。
最后一条命令是:
./program | stdbuf -o0 tr '\r' '\n' | awk -F'[][]' '{printf $2 "\r"}'
这确实打印了括号之间的第一个匹配项,并带有回车符。
因此,程序中的实时日志显示在一条更新的行[x%] long compile detail
上,将被缩写为x%
,仍然使用1行。
答案 2 :(得分:-1)
从以下位置更改您的echo命令:
button.btn {
margin: 0 1px;
}
收件人:
echo -ne
从echo文档:
echo -e