Dấu phân cách kỳ diệu giữa tên tệp trong đầu ra ls là gì?


20

Đầu ra của ls(không có đối số) xuất hiện để phân tách tên tệp với dấu ngắt dòng.

Chứng cớ:

  • ls | grep foohoạt động như mong đợi, với grepviệc coi mỗi tên tệp là một dòng đầu vào riêng biệt.

  • ls > files.txt; vim files.txt -> trong Vim, mỗi tệp nằm trên một dòng riêng biệt

Tuy nhiên, trong thiết bị đầu cuối, đầu ra của việc lsđặt nhiều tệp trên một dòng, tách các tên tệp với khoảng trắng để tạo các cột được căn chỉnh độc đáo:

$ ls
a.txt  b.txt  c.txt

Vì vậy, câu hỏi của tôi là, làm thế nào để làm điều này?

Có phải nó đang sử dụng một số char kiểm soát đặc biệt để 'giả' một dòng mới? Hoặc nó có biết khi nào đầu ra của nó được dẫn đến một lệnh khác và định dạng đầu ra của nó khác trong trường hợp này không?

Câu trả lời:


24

Hoặc nó có biết khi nào đầu ra của nó được dẫn đến một lệnh khác và định dạng đầu ra của nó khác trong trường hợp này không?

Đúng. Từ hướng dẫn đầy đủ (có sẵn thông qua info lsnếu tài liệu được cài đặt):

Nếu đầu ra tiêu chuẩn là một thiết bị đầu cuối, đầu ra nằm trong các cột (được sắp xếp theo chiều dọc) và các ký tự điều khiển là đầu ra dưới dạng dấu hỏi; mặt khác, đầu ra được liệt kê một trên mỗi dòng và các ký tự điều khiển là đầu ra nguyên trạng.

Nếu bạn thích đầu ra một cột, bạn có thể chạy

ls -1

để có được nó trong thiết bị đầu cuối là tốt.


7
Cụ thể, hàm lssử dụng để xác định xem đầu ra có phải là đầu cuối hay không isatty(3).
Blrfl

Cũng hơi liên quan, nếu muốn kiểm tra điều này trong một tập lệnh shell đơn giản, người ta có thể chạy tty -svà kiểm tra trạng thái trả về của nó.
Daniel Andersson

10

lsphát hiện nó khi bạn dẫn đầu ra của nó. Bạn có thể thấy nó trong tài liệu:

Nếu đầu ra tiêu chuẩn là một thiết bị đầu cuối, đầu ra nằm trong các cột (được sắp xếp theo chiều dọc) và các ký tự điều khiển là đầu ra dưới dạng dấu hỏi; mặt khác, đầu ra được liệt kê một trên mỗi dòng và các ký tự điều khiển là đầu ra nguyên trạng.

Nếu bạn muốn mỗi tệp trong đầu ra được đặt trên một dòng riêng bất kể chuyển hướng đường ống, bạn có thể sử dụng

ls -1
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.