Як відключити обертання рядків у терміналі?


55

Мені потрібно переглянути великі файли журналів за допомогою bash shell. Я використовував lessдля відкриття файлів, але так як рядки занадто довгі, відбувається якесь обгортання рядків / слів.

Оскільки файли - це журнали Log4J, а на початку кожного рядка є візерунок, обертання рядків ускладнює аналіз результатів, тому я почав використовувати, less -Sякий відбиває довгі рядки.

Але тепер мені потрібно скористатися tail -f, і він також обертає рядок виводу. Чи можна відключити загортання рядків у bash оболонці для всіх команд?

Примітка. Є відповідь на інше питання, в якому згадується послідовність втечі echo -ne '\e[?7l', але, здається, він не працює на bash.


4
Зауважте, що це не пов'язано з вибором оболонки (bash), але це може залежати від вашого вибору терміналу (xterm, Terminal, gnome-terminal, konsole,…). Див. Яка точна різниця між 'терміналом', 'оболонкою', 'tty' та 'консоллю'?
Жил 'ТАК - перестань бути злим'

4
Як згадував Жилл, це питання емулятора терміналу. Наприклад, в screen, є команда "wrap". В xterm, є -awможливість запобігти автоматичне обгортання ліній. Ймовірно, є деякі ресурси X для інших емуляторів терміналів. Який емулятор ви використовуєте?
Арседж

Я використовую gnome-terminal.
nunaxe

1
@Arcege: Насправді, це +awдля xterm:) Але це вирішує проблему для виведення (наприклад, ls -lз купою довгих імен Windows-ish з TPB, він працює чудово), для введення даних , при введенні команди, ви, ймовірно, все ще хочете обгортати (або, принаймні, ви не хочете, як зараз) +aw: спробуйте написати за межею "межі стовпця", а потім відслідковуйте величезну помилку GFX).
Емануель Берг

До речі, це не здається, ані urxvtне rxvtможе відключити обгортання рядків.
Емануель Берг

Відповіді:


7

Вам насправді потрібно tail -fчи хотілося щось подібне less +F? Оскільки це здається, що ви все ще хочете інтерактивного пейджера, мені здається, було б набагато простіше дотримуватися, lessніж повторно реалізовувати себе.

Підсумкова примітка: ви розглянули tail -f file | less?


Я зробив деякі досліди з screenі так xtermяк ці емулятори є варіанти для запобігання обгорток лінії. Але існує велика різниця між обрізанням лінії та приховуванням хвоста лінії, щоб ми могли її переглянути, якщо захочемо. Використання tail -f file | less -Sне є ідеальним, оскільки, здається, відключити, -fале це найкраще рішення, яке я знайшов.
nunaxe

Відповідь Бориса Маркоса, можливо, краща. Він використовує lessбезпосередньо.
AnthonyD973

51

Спробуйте:

less -S +F filename

  • Натисніть, Ctrlcщоб зупинити хвостик, і тепер ви можете рухатися вліво і вправо за допомогою клавіш курсору.
  • Натисніть, Shiftfщоб відновити хвости
  • Натисніть Ctrlc, qщоб вийти

Це чудово! У мене в терміналі було два екрани, але, оскільки я прочитав це вчора, я просто передаю широкий вихід less -S. Також дуже корисно на ноутбуці.
Джонатан Естрем


15

Припустимо, у вас COLUMNSвизначена змінна, яку можна виконати

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

в іншому випадку підмініть $COLUMNSшириною стовпців терміналу, як отримано stty -a.


2
Ще одна альтернатива $COLUMNS(не оновлюється одразу SIGWINCH, лише в наступному підказці) та stty -a(складніше використовувати у сценарії) tput cols.
манатура

Спасибі ензотибу. Це працює, але воно обрізає лінію, і ми не в змозі побачити кінець довгих рядків. Чи можна змусити cutсебе вести себе так, як less -Sдовга лінія буферна, і ми можемо побачити повний рядок за допомогою клавіш спрямування?
nunaxe

Гм, не все так просто. Я думаю про провідні рішення, як, наприклад, два окремі screenвікна, кожне з яких tail -f | cutабо сценарій, який певним чином імітує lessповедінку. Але наразі не мають рішення.
enzotib

1
Побічна примітка: вирізати лише кількість байтів; на відміну від цього less -S, він збирається накручувати кольоровий текст, або що-небудь із втечами ANSI. Можливо, ви також накрутите Unicode.
ELLIOTTCABLE

Так, less -Sкорисніше з кольоровим текстом. Ви можете використати less -S -Eдля виходу негайно - корисно для вирізання кольорового виводу на $ COLUMNS.
синюватий

4

Ви можете відключити перенесення рядків для less, tailі будь-який інший команди під сонцем Linux з:

tput rmam

Для відновлення обгортання рядків використовуйте:

tput smam

3

Емулятор терміналу термінатора (http://software.jessies.org/terminator/) дозволяє не обертати довгі рядки та має горизонтальну прокрутку (але написана на Java).


Як це ввімкнути? Схоже, це не працює за замовчуванням.
дефш

Станом на цей запис горизонтальна прокрутка за замовчуванням увімкнена. Чудова, кросплатформна рекомендація. Дякую!
user7089

Будь ласка, покрасьте цю відповідь, показавши, як можна було б включити цю функцію. Я шукав у налаштуваннях, і не можу знайти цю опцію. FWIW, я біжу terminator v1.91.
AnthonyK

2
@AnthonyK Є два споріднені емулятори термінала, що мають ім'я terminator, цей, на який посилається gentledevil, і той, який ви використовуєте.
jlliagre

3

Два хороших відповіді / приклади тут

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

Є багато коментарів, які відволікаються від питання. Питання ОП було

Але тепер мені потрібно скористатися tail -f, і він також обертає рядок виводу. Чи можна відключити загортання рядків у bash оболонці для всіх команд?

Було зроблено кілька коментарів щодо функції автозагортання, заявивши, що не всі термінали мають її. Можливо, Але (окрім термінатора , розробники якого не містять опису терміналу ) усі наведені приклади були xterm, rxvt та деякі схожі чи нащадкові. Вони пов'язані між собою.

+awВаріант в xtermвідповідає autoWrapресурсу. Звертаючись до посібника, він говорить про це

   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 Control Sequences це написано

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

що, безумовно, не "залежить від вашого вибору терміналу", оскільки будь-який термінал із сумісністю VT100 підтримує цю функцію. xterm та rxvt роблять це, наприклад. Інші так само.

Чи корисна ця функція для ОП, є дискусійним. Придушення загортання ліній - лише один аспект проблеми:

  • Оболонка знає ширину терміналу, але це можна змінити, встановивши COLUMNS"велике" значення.
  • Звичайно, це означає, що додатки витратять багато часу на написання правої межі (а деякі, помиляючись, все одно почнуть новий рядок).
  • ОП, ймовірно, припускав, що програма буде прокручувати вліво / вправо, щоб зробити широкий термінал корисним. (термінатор робить це - частково - але інші його недоліки скасовують це, за винятком тих, хто використовує термінал лише для catотримання журналу на екран).
  • що ОП насправді шукає - це набір інструментів, за допомогою яких можна відключити обертання рядків, особливо для перегляду журналів. Якщо термінал працює досить добре для загального користування, це не має значення для вибору інструментів, які використовуються в терміналі.

Існують пейджери, які можуть виконувати все необхідне, наприклад, багатожитловий список, який перераховує його функції

Обертання рядків можна вимкнути, після чого можна прокручувати вліво / вправо за допомогою клавіш курсору

Будучи на основі ncurses, він повинен працювати на будь-якому з цитованих терміналів.


1

vi

усередині типу vi

:set nowrap

Я вважаю, що також є плагін для vi, який надасть вам подібний хвіст.


-1

Якщо ви дійсно хочете побачити всі рядки, ви можете скопіювати та вставити текст у текстовий редактор, наприклад Atom або Notepad ++, і вимкнути обгортання рядків.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.