수행하려는 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}'