less
kiểm tra xem nó stdout
có phải là thiết bị đầu cuối không và hoạt động như thế cat
nào khi không (sao chép stdin sang thiết bị xuất chuẩn cho đến khi EOF).
Tính năng này cho phép bạn viết các tập lệnh hoặc chương trình luôn gửi đầu ra của chúng (ví dụ như --help
đầu ra) less
trong khi vẫn cho phép chuyển hướng dễ dàng đến một tệp. Nó sẽ hút nếu some_command --fullhelp > help.txt
vẫn chờ thanh không gian trên stdin đến trang thông qua văn bản, hoặc một cái gì đó. Một số lệnh (ví dụ man
) kiểm tra xem đầu ra của chính chúng để quyết định có gửi đầu ra của chúng thông qua máy nhắn tin hay không. Nếu bạn chạy man ls > ls.txt
, nó không bao giờ gọi bạn $PAGER
.
less
Hành vi giống như con mèo rất tiện lợi nếu bạn quên chỉnh sửa nó từ một lớp lót khi thêm nhiều giai đoạn vào đường ống.
less
cần phải tìm ra kích thước thiết bị đầu cuối (kích thước màn hình, để biết có bao nhiêu dòng hiển thị cùng một lúc). Việc ioctl(2)
sử dụng nó stdout
sẽ trả về ENOTTY trên một thiết bị đầu cuối, vì vậy dù sao nó cũng không thể tránh xử lý trường hợp không phải thiết bị đầu cuối. less
thực sự sử dụng isatty(3)
trước khi kiểm tra kích thước thiết bị đầu cuối, nhưng isatty
hoạt động bằng cách thử ioctl chỉ tty và kiểm tra thiếu lỗi.
Ngay cả một máy nhắn tin đơn giản như more(1)
(ít nhất là phiên bản linux-linux) cũng có tính năng này, bởi vì đó có lẽ là hành vi lành mạnh đơn giản nhất để thực hiện cho trường hợp đó.
Lưu ý rằng khi bạn đặt một cái gì đó vào less
(ví dụ grep foo bar.txt | less
), nó phải mở /dev/tty
cho đầu vào bàn phím. (Bạn có thể thấy nó làm điều này với echo foo | strace less
).
bash script.sh
,bash script.sh | cat
,bash script.sh > file
, và xem những gì bạn nhận được đầu ra.