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ファイルに関する情報が見つからない場合は、それを別のストリームに書き込みます。 はファイルハンドル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

関連情報