특정 문자열이 포함된 명령 출력 줄을 억제합니다.

특정 문자열이 포함된 명령 출력 줄을 억제합니다.

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의 답변에 추가하려면 반환 코드를 from mycommand이 아닌 from의 코드로 지정하려면 from의 반환 상태를 grep사용하고 무시하면 됩니다 (억제할 문자열을 찾을 수 없는 경우).pipefailgrep

(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; })

    • stdout: 나다
    • 반품:1
  • (set -o pipefail; (echo "REMOVE" && true 2>&1) | { grep -v "REMOVE" || true; })

    • stdout: 나다
    • 반품: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

관련 정보