「man ls> temp.txt」をしました。出力テキストファイルが破損しています


27

man ls > temp.txt出力テキストファイルを実行すると破損します。破損とは、一部の単語の最初と最後の文字が過度に繰り返されることを意味します。

の最初の数行temp.txt

LS(1)                     BSD General Commands Manual                    LS(1)

NNAAMMEE
     llss -- list directory contents

SSYYNNOOPPSSIISS
     llss [--AABBCCFFGGHHLLOOPPRRSSTTUUWW@@aabbccddeeffgghhiikkllmmnnooppqqrrssttuuwwxx11] [_f_i_l_e _._._.]

DDEESSCCRRIIPPTTIIOONN

等々。リダイレクションman lsがなければ、まったく正常です。何が起こっていますか?


興味深いことに、フォーマットを使用してファイルを表示するlessmore、フォーマットを正しく表示します。を使用するvimと、生のバックスペース(^H)に余分な文字が表示されます。
ケルビン

2
あなたのファイルはしゃっくりに苦しんでいます。
クトゥルフ

おもしろいことに、Linuxコンピューターのmanコマンドは、出力のリダイレクト時にこのように動作しません。
デビッドベイリー

回答:


30

からman man

バックスペースとアンダースコアなしで、マンページのプレーンテキスト版を取得するには、試してください

    # man foo | col -b > foo.mantxt

manマニュアルページのフォーマットされたバージョンを印刷します。アンダースコアと二重文字が解析されます

それらが「解析」されるほどではなく、「端末がない場合、太字フォーマットは繰り返し文字として表示されます」。端末(vt100、xterm、Terminalなど)に接続すると、manは端末を認識し、色、太字、下線などを実行するための適切な制御コードを送信します。正しく解析されている-単に端末タイプがnullの場合。

MichaelTによるコメント


21

むかしむかし、コンピューターはテレタイプ(テレプリンター)に日常的に接続されていました。テレタイプ(テレプリンター)は、受け取ったテキストをすべてリアルタイムで紙に印刷していました。テレプリンターには下線付きまたは太字のテキスト用の機能はありませんでしたが、下線の出力、バックスペース、および他の何かを印刷すると、その下線が表示されます。同様に、文字の出力、バックスペース、および同じ文字の出力は、文字が暗く見える傾向がありますが、その効果はインストールされたリボンの品質によって異なります(リボンが古くて弱い場合は、同じ文字を2回入力します)新しいリボンを使用すると、キャラクターを一度入力しても最大の黒度に近くなります)。さらに、ユーザーがプリンターに接続していなくても、man印刷スプーラーへの接続はかなり一般的manでしたが、これはおそらく、出力がリダイレクトされた場合でもそのように動作する理由を説明しています。

ところで、一部のプリンター(さらにはテレプリンター)では、プリントヘッドが方向を繰り返し反転する必要があるため(および通常、両端でターゲットをオーバーシュートするため)、パフォーマンス_←U_←N_←D_←E_←R_←L_←I_←N_←I_←N_←Gが著しく低下し___________←←←←←←←←←←←UNDERLININGます。マルチストライクの太字を使用する場合も同じことが言えますが、最初に各文字が印刷されるとバックスペース文字がすぐに続き、2番目の文字はそうではないため、実際には動作が有利になる可能性があります。最初の文字の印刷中にプリントヘッドが加速すると、2番目の文字に対して少しずれて、太字効果がより効果的になります。


Unixについて学べば学ぶほど、Windowsと同じように下位互換性に妨げられていることがわかります。
思源レン

きちんとした歴史のレッスン!特定の方法が他の方法よりも好まれる理由を見るのは素晴らしいことです。
ダスティンウィーラー

15

Mateuszの答えは正しいのですが、tty向けのフォーマットを削除するのではなく、manフォーマットを変えることができることを指摘する価値があります。

たとえば、代わりに次のように適切にフォーマットされたPDFを取得できます。

man -t ls | pstopdf -i -o ~/ls.pdf

私は何年もの間、主にこれがそうするように私のmanページを印刷するためにOnyXを使ってきました。もういや!これを、システムのすべてのマニュアルページを実行するスクリプトに書き込みます。OnyXを使用している理由をずっと前に見ていなかったので、これに感謝します。私は、ターミナルからこのようなことをすることを大いに好みます。
user3439894

素敵な機能。これ以外にhtmlを出力する簡単な方法はありますか?gzip -dc $(man -w ls) | groff -Thtml -mandoc -c > /tmp/man-ls.html
ケルビン

manのマンページには、/ usr / bin / manで文字列を実行する-t形式とgroff -Tps ...実行する形式がハードコードされているように見えると書かれています。また、-TpsGROFF_TYPESETTERをオーバーライドするため、ソリューションが最も実行可能になる可能性があります。パイプラインのステップが欠落していますが。tbl、次にgroffが必要です。man -d ls使用するパイプラインを確認してください。
ティムB

6

別の方法として、次のシェル関数を定義しています(Oh-my-ZSHのOS Xプラグインから呼び出されます):

man-preview () {
    man -t "$@" | open -f -a /Applications/Preview.app
}

これにより、希望するマニュアルページがプレビューで開かれ、必要なきれいな書式設定がすべて行われます。この単一のエイリアスをに追加するのは簡単です(より簡単~/.profileだと思うので、に設定しました)。pmanman-previewalias pman='man-preview~/.zshrc

PS pmanインターネット上のさまざまなドットファイルで定義されている関数を見たことがあります。Oh-my-ZSHはたまたま私の定義されている場所です。


2

または、Carlin LindbergのManOpenを使用して、manページを検索して印刷できます。ManOpenは最初にNeXtStep向けに開発され、現在でもCarlのおかげで機能しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.