Bằng cách sử dụng ls --color=always
màu sắc nên được bảo tồn. Tôi không chắc chắn nếu nó là cụ thể gnu mặc dù. [ Chỉnh sửa từ OP: đúng vậy. ]
Trường hợp là ls
phát hiện xem đầu ra là tty hay không.
Nếu không, nó thường không in màu và không dịch
"ký tự không thể in" thành dấu hỏi. Điều này có thể được thêm vào bởi các -q
tùy chọn .
Thêm về chủ đề: Số dòng được xuất ra bởi ls .
gut coreutils nguồn ls; tham chiếu trên một số dữ liệu màu:
Biên tập:
Đối với gnu coreutils ls: --color=always
Đối với ls của OS X: đặt biến môi trường CLICOLOR_FORCE
và G
có nghĩa là màu. Lõi phù hợp với ls IEEE Std 1003.1-2001 . Các tùy chọn khác là các phần mở rộng cảnh giác giữa các triển khai.
ĐỒNG Ý. Có một cái nhìn sâu hơn về điều này. Mặc dù từ những gì tôi đọc xung quanh mọi người cũng cài đặt gnu coreutils trên OS X, tôi đoán có lẽ bạn sử dụng bản gốc .
Các trang man OS X cho trạng thái ls :
CLICOLOR_FORCE
Color sequences are normally disabled if the output isn't directed to a
terminal. This can be overridden by setting this flag. The TERM
variable still needs to reference a color capable terminal however
otherwise it is not possible to determine which color sequences to use.
Từ nguồn:
Nguồn Mac OS X 10.8.2 -> file_cmds-220.7 -> ls /
Từ mã đó cũng nhanh chóng rõ ràng rằng người ta có thể thiết lập
CLICOLOR_FORCE
để buộc màu.
Vì nó lần đầu tiên phân tích các đối số và setenv
màu sắc trên G
:
case 'G':
setenv("CLICOLOR", "", 1);
break;
Và sau khi argv
phân tích cú pháp:
/* CLICOLOR is set AND is a tty OR */
if (getenv("CLICOLOR") && (isatty(STDOUT_FILENO) ||
etenv("CLICOLOR_FORCE")))
/* force cli color is set */
Theo phần tiếp theo nếu TATE được đặt, màu được sử dụng:
if (tgetent(termcapbuf, getenv("TERM")) == 1) {
echo $TERM
nên mang lại một thiết bị đầu cuối màu có khả năng. Nhưng nếu bạn có được màu sắc bình thường thì đây là trường hợp.
---
Chỉnh sửa để cập nhật lần cuối:
Không chắc rồi. Nó lạ. Không chỉ có thêm dòng mà bạn không có bất kỳ dòng nào total ...
khi bắt đầu. Bạn có thể bắt đầu bằng cách kiểm tra đầu ra của một cái gì đó như thế này:
function dir() {
/bin/ls -FaGl "${@}" | awk '
function chr2hex(chr) {
return sprintf("%02x", index(i2x, chr));
}
function str2hex(str) {
r = ""
for (i = 1; i <= length(str); ++i)
r = r chr2hex(substr(str, i, 1));
return r;
}
BEGIN {
i2x = ""
for (i = 0; i < 256; ++i)
i2x = sprintf("%s%c", i2x, i);
printf("FNR : %d\n", FNR);
printf("FIELDWIDTHS: \"%s\"\n", FIELDWIDTHS);
printf("FS : \"%s\"\n", str2hex(FS));
printf("RS : \"%s\"\n", str2hex(RS));
printf("OFS : \"%s\"\n", str2hex(OFS));
printf("ORS : \"%s\"\n", str2hex(OFS));
}
{
printf("%2d:%2d:%2d \"%s\"\n", FNR, NR, NF, $0);
total += $4;
}
END {
printf("%21s: %d %s\n", "total", total / 1024, "KiB");
printf("FNR : %d\n", FNR);
printf("From : \"%s\"\n", FILENAME);
}
'
}
Sẽ cung cấp cho bạn một cái gì đó như - ( Từ có thể "-"
bằng ví dụ như gawk):
$ ./dir testdir
FNR : 0
FIELDWIDTHS: ""
FS : "20"
RS : "0a"
OFS : "20"
ORS : "20"
1: 1: 2 "total 24"
2: 2: 8 "drwxrwxr-x 6 mattdmo 4096 Apr 17 21:46 ./"
3: 3: 8 "drwxrwxr-x 8 mattdmo 4096 Apr 18 10:47 ../"
4: 4: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab1/"
5: 5: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab2/"
6: 6: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab3/"
7: 7: 8 "drwxrwxr-x 2 mattdmo 4096 Apr 17 21:46 ab4/"
total: 24 KB
FNR : 7
From : ""
ls
đang sử dụng cái gìls --version
hoặc tương tự. Tại sao bạn không có ví dụtotal ...
ở dòng đầu tiên? Chắc chắn đó là toàn bộ kịch bản?