Whatis コマンド出力リダイレクトエラー

Whatis コマンド出力リダイレクトエラー

次の操作はうまくいきます

~$whatis `ls /bin`
stty (1)             - change and print terminal line settings

stty (2)             - unimplemented system calls

su (1)               - change user ID or become superuser

etc...

出力をファイルにリダイレクトすると、この結果は表示されますか?

~$ whatis `ls /bin` > blah

kmod: nothing appropriate.

ntfsck: nothing appropriate.

ベストアンサー1

>標準出力()のみがリダイレクトされますstdoutが、whatisファイルに関する情報が見つからない場合は、別のストリーム()に書き込みます stderr。ファイルハンドル2を使用してリダイレクトすることもできます。このようにstdoutとstderrをリダイレクトするか、次のように2>してstderrをstdoutにリダイレクトできます。stderr&>2>&1

リダイレクトに関するすべての内容を読むことができます。ここ

したがって、あなたの例ですべてのエラーと成功を完了するには、次の手順をblah実行します。

whatis `ls /bin` &> blah

または、現在好ましい代替サブシェル構文を使用します。

whatis $(ls /bin) &> blah

可能性は希少ですが、/binそのようなことをするときは注意してください。結果はls /bin単語の区切りの影響を受けるため、ファイルにスペースが含まれている場合は別の引数として扱われますwhatis。これが通常、出力を解析することをお勧めしない理由ですls(参照:この問題議論をしてください)

あなたはあなたが試している様々なことをすることができます。

find /bin -maxdepth 1 -type f -exec whatis {} + &> blah

より深く(例:glob)を探すのではなく、/binファイル(パラメータ)だけを探し、見つけたtype f各項目に対して実行し、次に説明whatisしたのと同じリダイレクトを実行します。

おすすめ記事