Câu trả lời:
Trên macOS, ls
không phải là GNU ls
và không chấp nhận --color=always
tùy chọn mà người dùng Linux có thể mong đợi cho chức năng này.
Trong phiên bản macOS của ls
, màu sắc được kiểm soát bởi hai biến : $CLICOLOR
và $CLICOLOR_FORCE
. Nếu trước đây được xác định, thiết bị đầu cuối được chỉ định bởi $TERM
màu hỗ trợ và đầu ra là thiết bị đầu cuối, thì đầu ra này sẽ có màu, giống như --color=auto
tùy chọn của GNU . Nếu biến sau cũng được định nghĩa, điều kiện cuối cùng sẽ bị loại bỏ, hoạt động giống như của GNU --color=always
.
Vì vậy, để có màu sắc đi qua sed
, bạn sẽ cần một cái gì đó như sau:
CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
-G
tương đương với việc xác định $CLICOLOR
(và do đó không đủ)
Tôi sẽ mù quáng đoán rằng bản phân phối của bạn, giống như nhiều người, có bí danh ánh xạ ls
tới ls --color=auto
. ls -la --color=always | sed …
nên làm việc.
(Các auto
làm cho khung cảnh, nói một cách rộng rãi, ls
kiểm tra nếu sản lượng của nó đi vào màn hình hiển thị hay không, và chỉ màu sắc cho màn hình. Lý do cho điều này là màu sắc được thực hiện bởi trình tự thoát, tức là nhân vật chỉ huy vô hình, do đó, một chương trình có thể nhầm lẫn giữa chúng đối với một phần của tên tệp, những thứ như vậy.)
ls
cũng có-G
tùy chọn bật màu, nhưng tôi không chắc nó hoạt động như thế nào trong một đường ống dẫn.