it-mot-dan-vi.com

Làm thế nào để vô hiệu hóa bọc dòng trong một thiết bị đầu cuối?

Tôi cần xem các tệp nhật ký lớn bằng cách sử dụng bash Shell. Tôi đã sử dụng less để mở các tệp, nhưng vì các dòng quá dài nên có một số dòng/gói Word đang diễn ra.

Vì các tệp là các bản ghi Log4J và có một mẫu ở đầu mỗi dòng, việc có các dòng được bọc khiến việc phân tích đầu ra trở nên khó khăn, vì vậy tôi bắt đầu sử dụng less -S mà cắt dài dòng.

Nhưng bây giờ tôi cần sử dụng tail -f, và nó cũng kết thúc tốt đẹp đầu ra. Có thể vô hiệu hóa dòng bọc trong bash Shell cho tất cả các lệnh không?

Lưu ý : có câu trả lời cho một câu hỏi khác đề cập đến chuỗi thoát echo -ne '\e[?7l', nhưng dường như nó không hoạt động trên bash.

59
nunaxe

Bạn có thực sự cần tail -f hoặc muốn một cái gì đó như less +F làm gì? Vì có vẻ như bạn vẫn muốn một máy nhắn tin tương tác, nên đối với tôi, việc gắn bó với less sẽ dễ dàng hơn nhiều so với việc tự mình thực hiện lại.

Một lưu ý cuối cùng: bạn đã xem xét tail -f file | less?

9
jw013

Thử:

less -S +F filename

  • Nhấn Ctrlc để dừng đuôi và bây giờ Bạn có thể di chuyển sang trái và phải bằng các phím con trỏ.
  • Nhấn Shiftf để tiếp tục theo đuôi
  • Nhấn Ctrlcq bỏ thuốc lá
55
Boris Marcos

Tìm thấy một câu trả lời tốt từ superuser , hoạt động vượt trội cho gnome-terminal, và có lẽ cho các thiết bị đầu cuối khác:

setterm -linewrap off

enter image description here

20
Yuri Ghensev

Giả sử bạn có biến COLUMNS được xác định, bạn có thể thực thi

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

mặt khác thay thế $COLUMNS với chiều rộng cột của thiết bị đầu cuối, như được lấy bởi stty -a.

17
enzotib

Bạn có thể vô hiệu hóa gói dòng cho less, tail và mọi lệnh khác trong Linux Sun với:

tput rmam

Để khôi phục sử dụng gói dòng:

tput smam
6
WinEunuuchs2Unix

Hai câu trả lời hay/ví dụ ở đây

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)

Một cảnh báo: ít nhất là trên thiết bị đầu cuối tích hợp trên máy cắt Mac của tôi dường như không xử lý tốt các ký tự tab. Có vẻ như nó hiển thị chúng với 8 ví dụ, nhưng chỉ tính toán chúng là 4 không gian rộng hoặc tương tự. Nói cách khác, nếu thiết bị đầu cuối của bạn rộng 80 ký tự và đầu ra của bạn chứa một số tab trên mỗi dòng, bạn phải đặt chiều rộng thành có thể là 60 hoặc đại loại như thế. YMMV.

4
d-b

Trình giả lập thiết bị đầu cuối terminator (http://software.jessies.org/terminator/) cho phép không bao bọc các dòng dài và có cuộn ngang (nhưng được viết bằng Java).

3
gentledevil

Có một vài ví dụ trên trang này đuôi ống với -f ... từ các thử nghiệm của tôi, nó không hoạt động chính xác, nếu bạn thực sự cần đường ống (ví dụ: nếu bạn cần thêm một cái gì đó, như grep), bạn có thể sử dụng một cái gì đó như :

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

không phải là tốt nhất cho hiệu suất có thể nhưng hoạt động ... khác nếu không yêu cầu thêm pipping bạn có thể sử dụng một cái gì đó khác nhau như:

less -S +F file.log
2
nars

Sử dụng các tùy chọn bên dưới với less. Nó sẽ vô hiệu hóa Word quấn và giữ màu văn bản, nếu được chỉ định.

[.__.] less -SR +F filename

2
Kamal Nayan

Có rất nhiều ý kiến ​​đi lạc từ câu hỏi. Câu hỏi của OP

Nhưng bây giờ tôi cần sử dụng tail -f, và nó cũng kết thúc tốt đẹp đầu ra. Có thể vô hiệu hóa dòng bọc trong bash Shell cho tất cả các lệnh không?

Một số ý kiến ​​đã được thực hiện về tính năng autowrap, nói rằng không phải tất cả các thiết bị đầu cuối đều có nó. Có lẽ. Nhưng (ngoài terminator , có nhà phát triển tài liệu không mô tả đầu cuối ) tất cả các ví dụ được đưa ra là xterm, rxvt và một số giống nhau hoặc hậu duệ. Những điều đó đều liên quan.

Các +aw tùy chọn trong xterm tương ứng với tài nguyên autoWrap. Tư vấn hướng dẫn, nó nói rằng

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

và trong Trình tự điều khiển XTerm nó nói

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

mà chắc chắn không "phụ thuộc vào lựa chọn thiết bị đầu cuối của bạn", vì bất kỳ thiết bị đầu cuối nào có khả năng tương thích VT100 đều hỗ trợ tính năng này. xterm và rxvt làm điều này, ví dụ. Những người khác cũng làm như vậy.

Liệu tính năng này có hữu ích hay không đối với OP. Việc ngăn chặn đường bao chỉ là một khía cạnh của vấn đề:

  • Shell biết chiều rộng của terminal terminal nhưng có thể bị ghi đè bằng cách đặt COLUMNS thành giá trị "lớn".
  • Tất nhiên, điều đó có nghĩa là các ứng dụng sẽ dành nhiều thời gian để viết ở lề phải (và một số, bị sai, dù sao cũng sẽ bắt đầu một dòng mới).
  • OP có thể giả định rằng ứng dụng sẽ cuộn sang trái/phải để làm cho thiết bị đầu cuối rộng có thể sử dụng được. (terminator thực hiện điều này - một phần - nhưng các nhược điểm khác của nó sẽ loại bỏ điều đó, ngoại trừ những người chỉ sử dụng thiết bị đầu cuối cho cat 'khi đăng nhập vào màn hình).
  • những gì OP thực sự đang tìm kiếm là một bộ công cụ có thể được yêu cầu vô hiệu hóa tính năng ngắt dòng, đặc biệt là để xem logfiles. Nếu thiết bị đầu cuối hoạt động đủ tốt để sử dụng chung, điều đó không liên quan đến việc lựa chọn công cụ mà người ta sử dụng trong thiết bị đầu cuối.

Có những máy nhắn tin có thể làm những gì cần thiết, ví dụ: multitail trong đó liệt kê các tính năng của nó

Gói dòng có thể được tắt, sau đó người ta có thể cuộn sang trái/phải bằng các phím con trỏ

Là dựa trên ncurses, nó sẽ hoạt động trên bất kỳ thiết bị đầu cuối được trích dẫn.

2
Thomas Dickey

vi

bên trong loại vi

:set nowrap

Tôi tin rằng cũng có một plugin cho vi sẽ cung cấp cho bạn đuôi như hành vi.

1
Jacques