--group-thư mục-tùy chọn đầu tiên cho lệnh ls


13

Tôi đang sử dụng cả Ubuntu 16.04 và OS X.

alias ll='ls -Flh --group-directories-first'

Đây là một bí danh trong bashrc của tôi, nhưng bằng cách nào đó --group-directories-firsttùy chọn đã bất hợp pháp trong OS X sau khi tôi nâng cấp bash của mình với Homebrew. Trong máy tính để bàn Ubuntu của tôi, tôi vẫn có thể sử dụng tùy chọn đó.

Trong phiên bản nào của Bash, tùy chọn không được hỗ trợ? Phiên bản Bash trong máy OS X của tôi nóiGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Tôi muốn sử dụng --group-directories-firsttùy chọn một lần nữa. Có cách nào để đạt được nó?


1
Bạn đang sử dụng correutils gnu lshoặc macOS ls? Bạn đã thử cái khác chưa?
bmike

Câu trả lời:


12

Cài đặt coreutilsvới Homebrew và bí danh llđể gls -Flh --group-directories-firstthay thế.

  • brew install coreutils cài đặt GNU Coreutils , trong trường hợp nó không được cài đặt.
  • Sử dụng alias ll='gls -Flh --group-directories-first'trong .bashrc.
    (Nếu bạn muốn sử dụng cùng một .bashrctệp trong cả hai hệ điều hành, xem bên dưới.)

Trong Ubuntu, lsđược cung cấp bởi GNU Coreutils , thứ mà Ubuntu luôn có. Đó là lý do tại sao lshỗ trợ --group-directories-firsttrong Ubuntu. Có lẽ bạn cũng đã từng sử dụng phiên bản GNU Coreutils lstrên macOS, mà Homebrew cài đặt glsnhưng có thể sử dụng được theo lsnhiều cách.

lslà một lệnh bên ngoài, không phải là nội dung Bash. Sử dụng một phiên bản hoặc bản dựng khác của Bash sẽ không ảnh hưởng đến nó. Tôi không chắc điều gì đã xảy ra khi bạn nâng cấp Bash bằng Homebrew. Có lẽ nhiều hơn Bash đã được nâng cấp quá; có thể bạn đã có mộtlshàm shell hoặc bí danh được xác định trong tệp cấu hình toàn cầu đã được thay thế; có thể bạn đã có một liên kết tượng trưnglsđã chỉglsvà bị ghi đè; có thể bạn vẫn còn một cái gì đó như thế nhưng bạn$PATHđã thay đổi. Bất cứ điều gì đã xảy ra, GNU Coreutils lshỗ trợ--group-directories-first và chuyển sang nó (như tôi tin rằng bmike đang đề xuất ) sẽ khắc phục vấn đề của bạn.

Nếu vì lý do nào đó bạn muốn sử dụng cùng một .bashrctệp trong cả hai hệ thống, có một vài cách tiếp cận có thể. Bạn có thể tạo một liên kết tượng trưng, ​​tập lệnh trình bao bọc, hàm shell hoặc (vì mở rộng bí danh Bash là không hồi quy) bí danh cho glshệ thống Ubuntu của bạn. Nhưng tôi đề nghị thay vì kiểm tra mà hệ điều hành đang được sử dụng trong .bashrc. Mặc dù bạn sẽ nhận được một llbí danh khác nhau được xác định trong mỗi hệ thống, phương pháp này có lợi ích là tự ghi lại tài liệu. Bạn .bashrcsẽ có ý nghĩa với bạn trong một năm, hoặc một tháng.

if [ "$OSTYPE" == linux-gnu ]; then  # Is this the Ubuntu system?
    alias ll='ls -Flh --group-directories-first'
else
    alias ll='gls -Flh --group-directories-first'
fi

Hoặc nếu bạn thấy bạn thường thích chạy Coreutils ls, ngay cả khi bạn không sử dụng llbí danh, bạn có thể tạo lsbí danh để gls:

if [ "$OSTYPE" != linux-gnu ]; then  # Is this the macOS system?
    alias ls=gls
fi

alias ll='ls -Flh --group-directories-first'

(Cảm ơn bạn đã đến siousshjp vì đã bắt lỗi trong phiên bản trước của kịch bản đó.)


Tôi đã làm theo câu trả lời này và sử dụng: alias ls = 'gls --color -h --group-Directory-first' alias ll = 'ls -al'
user2875289

1
Tôi nghĩ rằng trong phần cuối cùng của bạn "Hoặc nếu bạn tìm thấy bạn thường thích để chạy ..." , nhu cầu có điều kiện để được thay đổi để: "$OSTYPE" != linux-gnu , vì bạn muốn alias ls để gls nếu bạn không trên một hệ thống Linux GNU (ví dụ bạn đang ở trên máy Mac).
siousshjp

1
@soroushjp Cảm ơn - bạn nói đúng. (Tôi đã sửa nó; xin lỗi về sự chờ đợi!)
Eliah Kagan
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.