当我在 Linux 的终端中运行任意命令时,有没有办法抑制包含某个句子的输出消息?
我试过
./mycommand | grep -v "I dont want to see this"
但信息仍然存在。
答案1
也许不需要的部分是输出到 stderr 但却输出到 stdout 的一部分。
尝试:
./mycommand 2>&1 | grep -v "I dont want to see this"
您可以将 stderr 和 stdout 管道传输到不同的目标。因此,您可以看到输出来自哪里:
./mycommand > >(grep -v "我不想看到这个"> stdout.log) 2> >(grep -v "我不想看到这个"> stderr.log)
答案2
为了补充 cmks 的答案,如果您还希望返回代码是 frommycommand
而不是 from grep
,则可以使用pipefail
并忽略 from 的返回状态grep
(当找不到要抑制的字符串时)
(set -o pipefail; (./mycommand 2>&1) | { grep -v "I dont want to see this" || true; })
例子:
(set -o pipefail; (echo "REMOVE" && false 2>&1) | { grep -v "REMOVE" || true; })
- 标准输出:无
- 返回:
1
(set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })
- 标准输出:无
- 返回:
0
(set -o pipefail; (echo "KEEP" && false 2>&1) | { grep -v "REMOVE" || true; })
- 标准输出:
KEEP
- 返回:
1
- 标准输出:
(set -o pipefail; (echo "KEEP" && true 2>&1) | { grep -v "REMOVE" || true; })
- 标准输出:
KEEP
- 返回:
0
- 标准输出: