以下の手順で動作します
~$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
ファイルに関する情報が見つからない場合は、それを別のストリームに書き込みます。 はファイルハンドル2なのでstderr
、 を使ってリダイレクトすることもできます。の2>
ようstderr
にstdoutとstderrの両方をリダイレクトする&>
か、次のようにstderrをstdoutにリダイレクトすることができます。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
/bin
これは、(glob のように) 深く検索せずに、ファイル (type f
引数) だけを検索し、見つかったものごとに を実行してからwhatis
、先ほど説明したのと同じリダイレクトを実行します。
答え2
とは システム コマンドの短い説明を含むデータベース ファイルのセットでキーワードを検索し、結果を標準出力に表示します。完全に一致する単語のみが表示されます。
kmod: 適切なものはありません。 kmod には何も見つからなかったことを示すメッセージです。
すべての出力をリダイレクトしたい場合は、これを試してください。
whatis $(ls /bin) > /tmp/a.txt