In ấn đến thiết bị đầu cuối trực tiếp:Tại sao ls cho đầu ra khác nhau khi đường ống
$ ls
a.out avg.c avg.h
Piping để cat
$ ls | cat
a.out
avg.c
avg.h
Tại sao ls
cho một đầu ra khác nhau dựa trên đích?
In ấn đến thiết bị đầu cuối trực tiếp:Tại sao ls cho đầu ra khác nhau khi đường ống
$ ls
a.out avg.c avg.h
Piping để cat
$ ls | cat
a.out
avg.c
avg.h
Tại sao ls
cho một đầu ra khác nhau dựa trên đích?
ls
thực sự có thể xác định xem nó xuất ra thiết bị đầu cuối hay tệp (với cuộc gọi thư viện isatty
). Nếu nó phát hiện một bàn điều khiển, nó sẽ cố gắng làm cho nó nhỏ gọn hơn để xem dễ dàng hơn.
tìm một trang web: http://www.ginac.de/~kreckel/fileno – kev
ls
tự động hoạt động như ls -1
khi được bơm.
Đây thường là những gì bạn muốn khi bạn đang piping ls
đến awk
hoặc một cái gì đó tương tự, vì nó sẽ xử lý đầu ra của ls
trên cơ sở từng dòng.
Để ghi đè hành vi mặc định này, bạn có thể sử dụng ls -C | cat
.
Ngoài ra, nó ls không sử dụng màu sắc khi đường ống. Vì vậy, nếu bạn muốn các mã thoát đầy màu sắc, bạn có thể sử dụng 'ls -C --color = yes | cat'. Nó có thể hữu ích với 'ls -C --color = yes | ít hơn -R' –
Vì vậy, mỗi dòng chỉ là một mục nhập, cho phép lệnh đầu ra được chuyển sang hoạt động như mong đợi. Ví dụ (cho ls
đầu ra của bạn), sau đây có lẽ không phải là những gì bạn muốn:
$ ls | sort -r
a.out avg.c avg.h
Nhưng vì sort
không biết là có nhiều hơn một mục trên mỗi dòng, nó không thể làm bất cứ điều gì. Hãy so sánh này với những gì thực sự xảy ra:
$ ls | sort -r
avg.h
avg.c
a.out
Bạn có thể đạt được (bất ngờ) hành vi đầu tiên bằng cách thông qua -C
-ls
.
FWIW, tôi cho rằng hành vi này bị hỏng. Truyền thống thời gian được vinh danh là dễ dàng có thể xâu chuỗi các đường ống rất lớn của lệnh được thực hiện khó khăn hơn nhiều khi các lệnh nói thay đổi ouput của chúng khi nó được gửi đến những nơi khác nhau. – paxdiablo