다음과 같은 명령이 있습니다.
find / -name libGL.so.1
“Permission denied”와 함께 많은 행을 반환합니다. 그런 줄을 제외하고 싶기 때문에 다음을 추가했습니다.
find / -name libGL.so.1 | grep -v 'denied'
그러나 출력은 동일합니다.-로 grep -v 'denied'
줄을 필터링하지 않습니다 Permission denied
. 많은 변형을 시도하고 grep 자습서를 살펴 보았지만 문제를 파악할 수 없습니다. 어떤 제안?
답변
그와는 아무 상관 없습니다 grep
– 파이프가 있기 때문에 그것의 |
표준 출력 스트림을 리디렉션 stdout
반면 Permission denied
메시지가 표준 오류 스트림에있다 stderr
. 당신은 당신이 사용하여 스트림을 결합하여 원하는 결과를 얻을 수 2>&1
(그 파일 기술자 인 스트림 리디렉션 2
그 파일 기술자 인 스트림을 1
정도) 그 stderr
뿐만 아니라 같은 stdout
위한 grep 명령의 입력에 파이프됩니다
find / -name libGL.so.1 2>&1 | grep -v 'denied'
그러나 그것을 stderr
리디렉션 하여 단순히 완전히 버리는 것이 더 일반적입니다./dev/null
find / -name libGL.so.1 2>/dev/null
2> & 1 대신 | & 사용 |
Bash 매뉴얼 페이지를 보면 다음과 같은 블러가 표시 될 것입니다.
|&
사용되는 경우 명령의 표준 오류는 파이프를 통해 command2의 표준 입력에 연결됩니다. 에 대한 속기입니다2>&1 |
.
STDERR 및 STDOUT에 가입하려는 경우에도이 구성을 사용할 수 있습니다.
find / -name libGL.so.1 |& grep -v 'denied'
답변
당신의 명령은 다음과 같아야합니다 :
find / -name libGL.so.1 2>/dev/null
찾기에서 표준 오류 (fd2)에 대한 권한에 대해 불평하고 있습니다. 이러한 행을 제거하려면 표준 (>)을 비트 버킷 (/ dev / null)으로 리디렉션하십시오.
답변
“permission denied”라인은 stderr (표준 오류) 스트림으로 가고 있지만 grep을 통해 stdout (표준 출력)을 파이프하고 있습니다.
stderr를 완전히 리디렉션 할 수 있습니다.
find / -name libGL.so.1 2> /dev/null
답변
sudo 명령을 호출 해 보셨습니까 ?
sudo find / -name libGL.so.1
여전히 메시지가 표시되면 이미 언급 한 stderr (fd = 2)를 nirvana (/ dev / null)로 리디렉션하십시오 .
sudo find / -name libGL.so.1 2> /dev/null
더 많은 아이디어가 있습니다 , 행운을 빌어 요!