Tôi có thể sử dụng .bashrc để làm cho ls hiển thị màu trên cả OS / X và Linux không?


8

Tôi chạy OS / X trên máy cá nhân và Linux trên các máy chủ từ xa. . giống.

Nhưng GNU lstrên Linux muốn xem công --colorstắc dòng lệnh hoặc nó sẽ từ chối hiển thị màu. Apple (BSD?) lsThích xem export CLICOLORS=1biến vỏ để bảo nó hiển thị màu.

Tôi sẽ làm cả hai, nhưng các lsbarfs của Apple nếu nó thấy một --colorscông tắc không xác định .

Có cách nào tốt trong .bashrc để tôi phát hiện xem có lschấp nhận chuyển đổi không và sau đó quyết định có đặt bí danh cho nó --colorshay không?


2
brew install coreutils... và sau đó chuẩn bị /usr/local/Cellar/coreutils/*/libexec/gnubin cho ĐƯỜNG của bạn.
muru

Câu trả lời:


8

Khi bạn đang cố gắng làm một cái gì đó có thể di chuyển, hãy kiểm tra các tính năng, không phải nền tảng:

if ls --help 2>&1 | grep -q -- --color
then
    alias ls='ls --color=auto -F'
else
    alias ls='ls -FG'
fi

Kiểm tra nền tảng bị phá vỡ khi nền tảng thay đổi. macOS cung cấp một hỗn hợp các công cụ người dùng BSD và GNU ngày nay, nhưng sự pha trộn này đang thay đổi theo thời gian theo hướng ưu tiên lớn hơn các công cụ BSD. Vì vậy, một thử nghiệm cho "macOS" ngày hôm nay có thể thất bại vào ngày mai khi Apple thay thế một công cụ GNU mà bạn phụ thuộc vào tương đương BSD gần nhất của nó nếu bạn đang dựa vào một tính năng mà cả hai thực hiện khác nhau. Kiểm tra tính năng thường xuyên hơn làm việc khi đối mặt với sự thay đổi.

Như một phần thưởng, đôi khi bạn cuối cùng tạo ra sự hỗ trợ cho các nền tảng mà ban đầu bạn không thử nghiệm. Đoạn mã trên cũng sẽ làm điều đúng đắn trên Solaris và FreeBSD, ví dụ.

(Đây là triết lý đằng sau GNU Autoconf, nhân tiện, đó là lý do tại sao một configuretập lệnh được viết cách đây 10 năm có lẽ vẫn hoạt động trên một hệ thống hoàn toàn mới ngày nay.)

Sửa đổi các bí danh cho phù hợp. Tôi chỉ hiển thị các giá trị tôi sử dụng trên các hệ thống macOS và Linux gần nhất khi tôi viết nó.


1
Đó là một ý tưởng rất thú vị mà tôi chưa bao giờ nghe thấy trước đây, nhưng sẽ giúp tôi tiết kiệm rất nhiều nỗi đau trong những năm qua để giữ cho các bí danh khác nhau được cập nhật. Cảm ơn.
Tim Kennedy

2

bạn có thể kiểm tra nếu nó là linux, và sau đó thiết lập lscho nó. I E:

export CLICOLORS=1
if uname -a | grep Linux >/dev/null; then
  # your linux ls stuff
fi
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.