命令 stdout 到 /dev/null

命令 stdout 到 /dev/null

我有一个非常简单的命令来生成我想做的 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}'

相关内容