マニュアルページリダイレクトの奇妙な動作

マニュアルページリダイレクトの奇妙な動作

mcマニュアルページをテキストファイルにリダイレクトしたかったのですが、man mc > mc誤ってそうしましたman mc > mc grep。結果は、mc2つのリンクされたmcマニュアルページを含むテキストファイルです。

その後、これを試み、端末にマニュアルページとエラーメッセージを含むテキストファイルが生成されman ls > 1 abcました。1lsNo manual entry for abc

次に私はそれを試しましたman du > du ls tac。 3つのリンクされたマニュアルページが予想されましたが、du実際の結果は、およびを含むduマニュアルページと呼ばれるテキストファイルですdulstac

各コマンドはなぜ結果を生成するのですか?

答え1

これは Bash マニュアルの比較的曖昧なセクションと一致します。これはセクションの下で説明されています。シェル構文:

単純なコマンドは、一連のオプションの変数割り当てとスペースで区切られた単語で構成されています。そしてリダイレクト、制御演算子によって終了します。最初の単語は実行するコマンドを指定し、引数0に渡されます。残りの単語は、呼び出されたコマンドに引数として渡されます。

(強調します。)

これは、コマンドとそのパラメータとすべてのリダイレクトを「混合」できることを意味します。

例えば。echo > world helloecho hello > world

つまり、次のコマンドを実行すると、man du > du ls tac次のようになります。

man du ls tac > du

3つのマンページはすべて最終的に呼ばれるファイルにリンクされています。duこれは、出力がリダイレクトまたはパイプされたときの動作の結果ですman。ポケットベルを使用しようとしなくなり、デフォルトで動作しますcat

答え2

参考用/好奇心用:

あなたの質問に答えていないことを知っていますが、マニュアルページの内容をリダイレクトする必要がある場合は、col(1)を使用してこれを行うことができます。

man 1 col | col -b -x > manfile.foo

関連情報