/dev/null에 대한 stdout 명령

/dev/null에 대한 stdout 명령

수행하려는 STDOUT을 생성하는 매우 간단한 명령이 있지만 /dev/null어떻게든 작동하지 않거나 여기에 뭔가가 누락되었습니다.

$ ldapsearch -Y GSSAPI -b "cn=users,cn=accounts,dc=example,dc=com" "uid=foo" | grep krbPasswordExpiration | tail -n1 | awk '{print $2}'
SASL/GSSAPI authentication started
SASL username: [email protected]
SASL SSF: 256
SASL data security layer installed.
20200608022954Z     <---- This is my krbPasswordExpiration value.

그러나 위의 명령줄에서 SASL이것이 표준 출력일 뿐이라면 /dev/null다음을 시도했지만 작동하지 않는 것 같습니다.

$ ldapsearch -Y GSSAPI -b "cn=users,cn=accounts,dc=example,dc=com" "uid=foo" | grep krbPasswordExpiration | tail -n1 | awk '{print $2}' 2> /dev/null

그것을 제거할 수 있는 다른 방법이 있나요?

답변1

넌 알아야 해무엇명령이 stderr로 출력 중이며 리디렉션이 명령과 연결되어 있는지 확인하십시오.

파이프는 명령 주위에 ( )가 있는 것으로 생각할 수 있습니다.

그래서

a | b | c

고려될 수 있다

( a ) | ( b ) | (c )

(실제로 작동하는 방식은 아니지만 정신적 모델입니다.)

리디렉션은 괄호 안에 발생합니다.

그러니 분명해

( a ) | ( b ) | ( c 2>/dev/null )

"a"의 오류 메시지를 리디렉션하지 마세요.

하지만

( a 2>/dev/null) | ( b ) | ( c )

하다

따라서 귀하의 명령은 명령의 오류를 리디렉션합니다 awk. 거기에서 오류를 리디렉션하고 싶습니다 ldapsearch.

그래서

$ ldapsearch -Y GSSAPI -b "cn=users,cn=accounts,dc=example,dc=com" "uid=foo" 2>/dev/null | grep krbPasswordExpiration | tail -n1 | awk '{print $2}'

관련 정보