実行したい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}'