次の操作はうまくいきます
~$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
したのと同じリダイレクトを実行します。
答え2
何ですか キーワードシステムコマンドの簡単な説明を含むデータベースファイルセットを検索し、結果を標準出力に表示します。完全な単語一致のみを表示します。
kmod:適切なものはありません。 kmodについて何も見つからなかったというメッセージがあります。
すべての出力をリダイレクトするには:
whatis $(ls /bin) > /tmp/a.txt