端末で行の折り返しを無効にする方法は?


55

bashシェルを使用して大きなログファイルを表示する必要があります。私はlessファイルを開くために使用していましたが、行が長すぎるため、何らかの行/単語の折り返しが行われています。

ファイルはLog4Jログであり、各行の先頭にパターンがあるため、行を折り返すと出力の分析が難しくなるため、less -S長い行をチョップするものを使用し始めました。

しかし、今はを使用する必要がありtail -f、出力を行で折り返します。すべてのコマンドのbashシェルで行の折り返しを無効にすることはできますか?

注:エスケープシーケンスecho -ne '\e[?7l'に言及する別の質問への回答がありますが、bashでは機能しないようです。


4
これはシェル(bash)の選択とは無関係ですが、ターミナル(xterm、Terminal、gnome-terminal、konsoleなど)の選択に依存することに注意してください。参照してください「末端」、「シェル」、「TTY」と「コンソール」の間の正確な違いは何ですか?
ジル「SO-悪であるのをやめる」

4
Gillesが述べたように、それはターミナルエミュレータの問題です。たとえばscreen、には、「ラップ」コマンドがあります。でxterm、そこにある-aw自動ラインラップを防止するためのオプション。他の端末エミュレータ用のXリソースがいくつかある可能性があります。どのエミュレータを使用していますか?
アルケージュ

を使用していgnome-terminalます。
nunaxe

1
@Arcege:実際には+awxterm:)しかし、これは出力の問題を解決します(たとえば、ls -lTPBからの長いWindows風の名前の束で、うまくいきます)、入力、コマンドを入力するとき、おそらくまだラップしたい(または、少なくとも現在のようにしたくない場合+aw:「列の境界」を超えて書き込み、巨大なGFXバグをバックトラックしてみてください)。
エマニュエルベルク

ちなみに、行の折り返しを無効にすることも無効にすることurxvtrxvtできないようです。
エマニュエルベルク

回答:


7

あなたは実際に必要tail -fなのless +Fですか、それとも何かしたいですか?あなたはまだインタラクティブなページャーを望んでいるように聞こえるので、私はそれをless自分で再実装するよりずっと固執する方がはるかに簡単だと思います。

最後の注意:あなたは考えましたtail -f file | lessか?


これらのエミュレータには、行の折り返しを防止するオプションがあるためscreen、いくつかの経験をしxtermました。ただし、必要に応じて表示できるように、行の切り捨てと行の末尾の非表示には大きな違いがあります。を使用tail -f file | less -Sする-fことは、それを無効にするように見えるので完璧ではありませんが、私が見つけた最良の解決策です。
nunaxe

@Boris Marcosの答えはおそらくもっと良いでしょう。less直接使用します。
AnthonyD973

51

試してください:

less -S +F filename

  • 押しCtrlcてテーリングを停止すると、カーソルキーを使用して左右に移動できます。
  • 押しShiftfてテーリングを再開します
  • 押してCtrlcq終了します

これは素晴らしい!端末が2つの画面にまたがっていますが、昨日これを読んだので、ワイド出力をにパイプしless -Sます。ラップトップでも非常に便利です。
ジョナタンオストレム


15

COLUMNS変数が定義されていると仮定すると、実行できます

tail -f your-app.log | cut -c -$COLUMNS

それ以外の場合$COLUMNSは、によって取得される端末の列幅に置き換えますstty -a


2
$COLUMNS(すぐに更新されSIGWINCHず、次のプロンプトでのみ更新される)およびstty -a(スクリプトで使用するのが難しい)の別の代替方法はtput colsです。
マナトワーク

enzotibに感謝します。それは機能しますが、ラインをトリミングし、長いラインの終わりを見ることができません。長い行がバッファリングされてcutいるless -S場所のように動作させることは可能ですか?方向キーを使用して完全な行を見ることができますか?
nunaxe

ああ、それほど単純ではありません。有線ソリューションは、たとえば、動作をエミュレートするスクリプトまたはスクリプトをscreen備えた2つの個別のウィンドウとして考えtail -f | cutていlessます。しかし、現時点では解決策はありません。
エンゾチブ

1
補足:カットはバイト数のみをカウントします。とは異なりless -S、色付きのテキスト、またはANSIエスケープのあるもので台無しになります。Unicodeを台無しにすることもあります。
エリオッタブル

はい、less -S色付きのテキストの方が便利です。less -S -Eすぐに終了するために使用できます-$ COLUMNSでカラー出力をカットするのに便利です。
15年

4

あなたはラインのための折り返し無効にすることができlesstailおよびLinuxの日と下の他のすべてのコマンドを:

tput rmam

行の折り返しを復元するには:

tput smam

3

ターミネータ(http://software.jessies.org/terminator/)ターミナルエミュレータは、長い行を折り返さないようにし、水平スクロールを備えています(ただし、Javaで記述されています)。


有効にするにはどうすればよいですか?デフォルトでは機能していないようです。
-defhlt

この記事の執筆時点では、水平スクロールはデフォルトでオンになっています。優れたクロスプラットフォームの推奨事項。ありがとう!
user7089

この機能を有効にする方法を示して、この回答をより良くしてください。環境設定で検索しましたが、このオプションが見つかりません。FWIW、私は走っていterminator v1.91ます。
AnthonyK

2
@AnthonyK名を共有する2つの無関係な端末エミュレータがありterminatorこの1 gentledevilが参照しているし、その1を使用しています。
jlliagre

3

ここに2つの良い答え/例

http://www.commandlinefu.com/commands/view/1710/tail-a-log-file-with-long-lines-truncated

tail -f logfile.log | cut -b 1-80

tail -f logfile.log | cut -b -$(tput cols)

注意点:少なくとも私のMacカットの組み込み端末では、タブ文字をうまく処理できないようです。たとえば、8スペースで表示されますが、4スペース幅などで計算されます。つまり、端末の幅が80文字で、出力に行ごとに複数のタブが含まれる場合、幅を60などに設定する必要があります。YMMV。


2

以下のオプションを使用しますless。指定されている場合、ワードラップを無効にし、テキストの色を保持します。

less -SR +F filename


2

このページにはいくつかの例があり、-fでテールをパイピングしています...テストからは、正しく動作しません。本当にパイピングが必要な場合(例えば、grepのような何かをパイピングする必要がある場合)のようなものを使用することができます:

watch -n 1 'tail -n $(($LINES-3)) file.log | cut -c -$COLUMNS'

おそらくパフォーマンスには最適ではありませんが機能します...それ以外の場合、余分なピッピングが必要ない場合は、次のような異なるものを使用できます:

less -S +F file.log

2

質問から外れた多くのコメントがあります。OPの質問

しかし、今はを使用する必要がありtail -f、出力を行で折り返します。すべてのコマンドのbashシェルで行の折り返しを無効にすることはできますか?

自動折り返し機能についていくつかのコメントがなされ、すべての端末に搭載されているわけではないと述べました。おそらく。しかし、(開発者が端末の説明を文書化していないterminatorを除いて)与えられた例はすべてxterm、rxvt、および類似または子孫でした。これらはすべて関連しています。

+awオプションxtermautoWrapリソースに対応しています。マニュアルを参照して、それは言う

   autoWrap (class AutoWrap)
           Specifies  whether  or  not  auto-wraparound should be enabled.
           This is the same as the VT102 DECAWM.  The default is "true".

とにxtermは制御シーケンスそれは言います

CSI ? Pm h
          ...
          DEC Private Mode Set (DECSET).
            Ps = 7  -> Wraparound Mode (DECAWM).

VT100互換の端末はこの機能をサポートしているため、これは確かに「選択した端末に依存しません」。たとえば、xtermとrxvtがこれを行います。他の人も同様です。

この機能がOP に役立つかどうかは議論の余地があります。行の折り返しを抑制することは、問題の1つの側面にすぎません。

  • シェルは端末の幅を認識していますCOLUMNSが、「大きい」値に設定することでオーバーライドできます。
  • もちろん、それはアプリケーションが正しいマージンに書くのに多くの時間を費やすことを意味します(そして、間違っていると、一部はとにかく新しい行を開始します)。
  • OPはおそらく、アプリケーションがワイド/ワイドターミナルを使用可能にするために左右にスクロールすると想定していました。(ターミネーターはこれを行います-部分的に-がcat、ログファイルを画面に表示するためだけにターミナルを使用する人を除いて、他の欠点はそれをキャンセルします)。
  • OPが実際に探しているのは、特にログファイルを表示するために、行の折り返しを無効にするように指示できるツールのセットです。端末が一般的な使用に十分に機能する場合、端末内で使用するツールの選択とは無関係です。

必要なことを行うことができるページャーがあります。たとえば、機能にリストするマルチテール

行の折り返しをオフにした後、カーソルキーで左右にスクロールできます

ncursesベースであるため、引用された端末のいずれでも動作するはずです。


1

vi

内部viタイプ

:set nowrap

また、viのような振る舞いを提供するプラグインもあると思います。


-1

行全体を表示したい場合は、テキストをコピーしてAtomやNotepad ++などのテキストエディターに貼り付け、そこで行の折り返しを無効にすることができます。

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