當我在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; })
- 標準輸出:nada
- 返回:
1
(set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })
- 標準輸出:nada
- 返回:
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
- 標準輸出: