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


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.