![경고 건너뛰기](https://linux55.com/image/91733/%EA%B2%BD%EA%B3%A0%20%EA%B1%B4%EB%84%88%EB%9B%B0%EA%B8%B0.png)
나는 이것이 "권한"이 포함된 경고를 건너뛸 것이라고 생각했습니다.
$ find / -iname "*mysql*" | grep -v "Permission"
find: /.DocumentRevisions-V100: Permission denied
find: /.fseventsd: Permission denied
find: /.Spotlight-V100: Permission denied
find: /.Trashes: Permission denied
그러나 그것은 진실이 아니다. 어떤 제안이 있으십니까?
이에 비해 예상대로 작동합니다.
$mkdir foo
$ls | grep -v "foo"
답변1
경고는 find
오류 스트림, STDERR, 파일 설명자 2에 표시되지만 파이프를 사용하면 STDOUT(파일 설명자 1)만 리디렉션하고 사용하므로 grep
메시지가 계속 표시됩니다.
해결책:
경고에 관심이 없으므로 STDERR을 다음으로 리디렉션하십시오 /dev/null
.
find / -iname "*mysql*" 2>/dev/null
반드시 사용해야 한다면 grep
STDOUT 및 STDERR을 전달한 후 다음 명령을 사용하십시오 grep -v "Permission"
.
쉘이 다음을 지원하는 경우 |&
:
find / -iname "*mysql*" |& grep -v "Permission"
POSIX 스타일:
find / -iname "*mysql*" 2>&1 | grep -v "Permission"
참고로 경고의 출처를 확인하세요. 루트가 아닌 사용자로 실행할 수 있으므로 권한 문제가 있을 수 있습니다. 이 문제를 해결하려면 다음 계정으로 명령을 실행 find
하거나 root
이에 따라 검색을 제한하세요.
답변2
find
대부분의 다른 유틸리티와 마찬가지로 이 유틸리티는 다음 위치에 오류 메시지를 기록합니다.표준 오류 스트림.
파이프라인이 리디렉션됩니다표준 출력 스트림하지만 오류 스트림 find
은 grep
여전히 콘솔로 이동합니다.
오류 스트림을 리디렉션하려면 find
다음을 사용하세요 2>&1
( grep
이는 "정상 출력이 진행되는 곳마다 오류 보내기"를 의미함).
find / -iname "*mysql*" 2>&1 | grep -v "Permission"
그러나 당신 이후로아마도오류가 사라지기를 원하면 다음을 사용하십시오.
find / -iname "*mysql*" 2>/dev/null
find
이로 인해 오류가 비트버킷 /dev/null
(채워지지 않는 장치 파일) 으로 흘러 들어가게 됩니다 .
답변3
경고는 리디렉션되지 않습니다. 이것은 도움이 될 것입니다:
find / -iname "*mysql*" 2>/dev/null | grep -v "Permission"
비록 당신은 그럴 수 있지만생각하다"권한" 이외의 경고를 참조하세요.
find / -iname "*mysql*" 2>&1 | grep -v "Permission"