Linux
命令標準輸出到 /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: admin@EXAMPLE.COM 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
我還有什麼辦法可以擺脫它?
您需要了解正在向 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}'