/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}'

関連情報