Làm thế nào để làm cho bash không bọc đầu ra?


33

Bất cứ khi nào một số lệnh tạo ra các dòng dài làm đầu ra (ví dụ: khi ls -lmột thư mục chứa các tệp có tên dài), các dòng dài được gói sang dòng tiếp theo, do đó làm rối cấu trúc cột.

Có cách nào để tránh điều này? Một cái gì đó giống với tùy chọn vim 'nowrap'?


cập nhật

Tôi nhận thấy một vấn đề với câu trả lời được chấp nhận:
nếu tôi tạo một bí danh như: alias ll="tput rmam; ls -l; tput smam"
và sau đó thử grep đầu ra của ll | grep foo
nó : nó vẫn sẽ in tất cả các tệp, như không có grep.

Giải pháp tôi tìm thấy là đặt dấu ngoặc quanh toàn bộ bí danh:
alias ll="(tput rmam; ls -l; tput smam)"



Câu trả lời:


27

Lưu ý rằng điều này không liên quan gì đến bash (một khi bạn đã khởi chạy lệnh, bash chỉ chờ nó kết thúc) và mọi thứ phải làm với thiết bị đầu cuối.

Hầu hết các trình giả lập thiết bị đầu cuối bọc ở lề phải theo mặc định. Nhưng điều này có thể được tắt bằng cách sử dụng trình tự điều khiển thích hợp , nếu trình giả lập thiết bị đầu cuối hỗ trợ nó; sau đó các dòng dài chỉ đơn giản là cắt ngắn:

printf '\033[?7l'
ls -l /a/folder/that/contains/files/with/long/names
printf '\033[?7h'

vâng, đây là những gì tôi đang tìm kiếm, cảm ơn Gilles!
Mihai Rotaru

12
Đáng chú ý hơn:tput rmam; ls -l longname; tput smam
Tạm dừng cho đến khi có thông báo mới.

thậm chí còn tốt hơn; nhưng [rs] mam đến từ đâu? Tôi đã tìm kiếm hướng dẫn sử dụng thuật ngữ và thuật ngữ nhưng không thể tìm thấy bất cứ điều gì về chúng?
Mihai Rotaru

2
@Mihai: thử tài liệu terminfo ( man 5 terminfotrên Linux).
Gilles 'SO- ngừng trở thành ác quỷ'

thực sự, nó ở đó
Mihai Rotaru


5

Bạn có thể sử dụng một chức năng như vậy:

nowrap() 
{ 
   cut -c-$(tput cols); 
}

Hãy ghi nhớ mặc dù bạn sẽ phải đặt tiền tố với nowraphoặc bất cứ thứ gì bạn đặt tên cho hàm.


Nó hoạt động, nhưng tôi mất mã màu; bất cứ cách nào để bảo tồn điều đó là tốt?
Mihai Rotaru

3

Bạn có thể ghi đè một chức năng để nó tự động chạy tput rmamtrước grep và tput smamsau:

function grep () {
  tput rmam;
  command grep "$@";
  tput smam;
}

Bỏ nó vào trong .bash_profilevà bất cứ khi nào bạn chạy grep, nó sẽ grep mà không cần ngắt dòng.

Điều này đã được chỉnh sửa rất nhiều, xin lỗi các nhà bình luận.


Các sleep 20là tuyệt vời :-)
Ciro Santilli新疆改造中心法轮功六四事件

2

chuyển nó thành lệnh ít hơn với công tắc -S:

ls -l | less -S

Sau đó, bạn có thể sử dụng mũi tên lên / xuống / trái / phải để cuộn và gõ q để thoát.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.