Như William Pursell đã đề cập , less
đọc tổ hợp phím của người dùng từ thiết bị đầu cuối. Nó rõ ràng mở ra /dev/tty
, các thiết bị đầu cuối kiểm soát; cung cấp cho nó một bộ mô tả tệp, tách biệt với đầu vào tiêu chuẩn, từ đó nó có thể đọc đầu vào tương tác của người dùng. Nó có thể đồng thời đọc dữ liệu để hiển thị từ đầu vào tiêu chuẩn của nó nếu cần thiết. (Nó cũng có thể ghi trực tiếp vào thiết bị đầu cuối nếu cần thiết.)
Bạn có thể thấy điều này xảy ra bằng cách chạy
some_command | strace -o less.trace -e open,read,write less
Di chuyển xung quanh đầu vào, thoát less
và xem nội dung của less.trace
: bạn sẽ thấy nó mở /dev/tty
và đọc từ cả hai mô tả tệp 0 và bất kỳ cái nào được trả về khi mở ra /dev/tty
(có thể là 3).
Đây là thực tế phổ biến cho các chương trình muốn đảm bảo họ đọc và ghi vào thiết bị đầu cuối. Một ví dụ là SSH, ví dụ khi nó yêu cầu mật khẩu hoặc cụm mật khẩu.
Như được giải thích bởi schily , nếu /dev/tty
không thể mở được, less
sẽ đọc từ lỗi tiêu chuẩn của nó (mô tả tệp 2). less
Việc sử dụng /dev/tty
đã được giới thiệu trong phiên bản 177, phát hành vào ngày 2 tháng 4 năm 1991.
Nếu bạn thử chạy cat /dev/tty | less
, như được đề xuất bởi Hagen von Eitzen , less
sẽ thành công trong việc mở /dev/tty
nhưng sẽ không nhận được bất kỳ đầu vào nào từ nó cho đến khi cat
đóng nó. Vì vậy, bạn sẽ thấy màn hình trống, và không có gì khác cho đến khi bạn nhấn CtrlCđể giết cat
(hoặc giết nó theo một cách khác); sau đó less
sẽ hiển thị bất cứ thứ gì bạn gõ khi cat
đang chạy và cho phép bạn kiểm soát nó.
less
đọc dữ liệu để hiển thị từ stdin và nó đọc các lệnh từ tty. Chúng là những thứ khác nhau.