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
사용하고 무시하면 됩니다 (억제할 문자열을 찾을 수 없는 경우).pipefail
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; })
- 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
- 표준 출력: