禁止包含特定字串的命令輸出行

禁止包含特定字串的命令輸出行

當我在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

相關內容