Theo một đường ống sử dụng ít hơn?


25

Có thể theo dõi ít ​​hơn (bằng cách nhấn F) một đầu vào đường ống (tương tự như một tệp)? Đối với một tệp đang được ghi vào, lệnh

less <file>

sẽ theo dõi tệp khi nhấn F.

Nhưng nếu tôi có một lệnh mà ống dẫn đầu ra trực tiếp vào ít hơn, như thế này

command | less

nhấn F sẽ không làm gì cả.

Vì vậy, có vẻ như đường ống không thể được theo sau như tập tin có thể? Hoặc có lẽ nó phải làm với lệnh cũng ghi vào STDERR? Hiệu ứng tôi đang cố gắng đạt được là luôn thấy đầu ra mới nhất của lệnh: giống như giữ cho PageDown được nhấn!

Một nhận xét liên quan giữ cho G (đi đến cuối): khi đường ống trực tiếp đến ít hơn, nó sẽ không hoạt động.


Câu trả lời:


21

Nhấn Fhoặc Gthực hiện lessthử để đạt EOF đầu vào. Nếu đầu vào là một đường ống, lesstreo cho đến khi đường ống được đóng ở phía bên kia (và không "không làm gì").

Điều này có thể được giải quyết bằng cách lưu đầu ra lệnh vào một tệp tạm thời trong nền và sau đó bằng cách sử dụng nó làm đầu vào cho less:

command > /tmp/x &
less +F /tmp/x; kill %; rm /tmp/x

Không có tùy chọn để làm điều này lesschỉ trong ; Tuy nhiên, tôi thừa nhận nó sẽ hữu ích.


Nếu đầu vào là một đường ống, lesstreo cho đến khi đường ống được đóng ở phía bên kia . Đó là loại tuyên bố sai lệch. Điều gì xảy ra là ít cuộc gọi hơn readtrong chế độ chặn, chờ dữ liệu mới hoặc đóng cửa đường ống.
Piotr Dobrogost

3
Sau khi nhấn F hoặc G trên đầu vào đường ống, lesskhông chỉ đọc chặn mà còn trong vòng lặp chờ EOF. Và một EOF trên đường ống chỉ xảy ra nếu phía bên kia của nó bị đóng.
mik

3
Nếu lesssẽ cập nhật màn hình trong vòng lặp đó, sẽ không có vấn đề gì. Chặn đọc có ít liên quan đến vấn đề này.
mik

1
@Flow đây không phải là một câu hỏi được đặt ra, mà chỉ là một sự chờ đợi được dự kiến ​​trong tình huống này - chờ thêm dữ liệu trong tệp khi đạt được EOF (nhân tiện sẽ không xảy ra đối với một đường ống kín) hoặc cho một ngắt để thoát khỏi chế độ theo dõi
mik

1
@PiotrDobrogost với tính năng chặn đọc lesssẽ không thể cập nhật màn hình, nếu không có dữ liệu; khi một số dữ liệu xuất hiện, việc chặn đọc sẽ trả về nó và lesssẽ có thể cập nhật màn hình mà không cần một luồng riêng
mik

6

Có thể theo dõi ít ​​hơn (bằng cách nhấn F) một đầu vào đường ống (tương tự như một tệp)?

Có, bắt đầu với phiên bản 474. Tuy nhiên, hiện tại nó không được đề cập trong ghi chú phát hành của bất kỳ phiên bản nào vì hiện tại vẫn còn một vấn đề với tính năng này. Dưới đây là một nhận xét từ người duy trì ít hơn - Mark Nudelman:

Liên quan đến lệnh F trên đường ống, điều này cũng được cố định trong ít hơn 474. Thay vì tìm kiếm EOF, lệnh F tìm đến cuối đầu vào được đệm và bắt đầu đọc ở đó. Tuy nhiên, nó không thực sự có thể sử dụng được vì khi bạn nhấn CTRL-C để dừng lệnh F, nó sẽ giết chết quá trình tạo ra đầu ra. Tôi không chắc làm thế nào để khắc phục điều đó.

Cho đến khi vấn đề này được khắc phục trong ít hơn một người có thể giải quyết nó bằng các tính năng shell. Xem câu trả lời của tôi về Có cách nào để thoát khỏi chế độ theo dõi ít ​​hơn mà không dừng các quy trình khác trong đường ống không? câu hỏi để biết chi tiết.

Để tham khảo, vấn đề với F không hoạt động với đường ống có số tham chiếu 300 trong danh sách các lỗi đã biết và có tiêu đề Lệnh F không hoạt động trên đầu vào đường ống.


Một nhận xét liên quan giữ cho G (đi đến cuối): khi đường ống trực tiếp đến ít hơn, nó sẽ không hoạt động.

Nó hoạt động bắt đầu từ phiên bản 466. Trích dẫn từ ghi chú phát hành cho phiên bản này:

Lệnh mới ESC-G đi đến hết dữ liệu hiện được đệm trong một đường ống


Lệnh ESC-G được giới thiệu trong phiên bản 466, được phát hành vào ngày 23 tháng 8 năm 2014.
mik

@mik Hình như có lỗi trong ghi chú phát hành cho phiên bản 471 rồi. Cảm ơn, đã sửa.
Piotr Dobrogost

Không phải là một lỗi, họ chỉ liệt kê các thay đổi tăng dần kể từ khi phát hành ổn định, phiên bản 458 trong trường hợp này. Tuy nhiên, không có bản phát hành ổn định với lệnh ESC-G.
mik

Lệnh ESC-G hiện đang được phát hành ổn định (481): "Ngày 16 tháng 10 năm 2015 ít hơn - 480 đã được phát hành để sử dụng chung".
mik

Cập nhật: Liên quan đến lệnh F trên đường ống, điều này cũng được sửa trong ít hơn 474. Thay vì tìm kiếm EOF, lệnh F tìm đến cuối đầu vào được đệm và bắt đầu đọc ở đó. Tuy nhiên, nó không thực sự có thể sử dụng được vì khi bạn nhấn ctrl-C để dừng lệnh F, nó sẽ giết chết quá trình tạo ra đầu ra. Tôi không chắc làm thế nào để khắc phục điều đó. - Mark Nudelman, người duy trì ít hơn
Piotr Dobrogost

2

Từ trang ít người

[Keyboard] COMMANDS [...]

   F      Scroll  forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already
          at the end of the file.  It is a way to monitor the tail of a file which is growing while it is being viewed.  (The  behav‐
          ior is similar to the "tail -f" command.)

Vì vậy, điều này sẽ làm việc, và nó thực sự làm việc cho tôi.


1
Lệnh này hoạt động khác khi được sử dụng với đường ống như được mô tả bởi @mik và rõ ràng không phải là thứ OP đang tìm kiếm.
Piotr Dobrogost
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.