Sự khác biệt giữa bí danh trong zsh và bí danh trong bash


9

Tôi đã tìm kiếm xung quanh nhưng không thể tìm thấy kết luận nào. Có sự khác biệt giữa lệnh bí danh trong zsh và lệnh bí danh trong bash không? Nếu không, điều đó có nghĩa là tôi có thể chia sẻ một tập các bí danh giữa hai shell và mong chúng hoạt động như tôi dự định?

Câu trả lời:



13

Cú pháp của aliaslệnh giống nhau trong tất cả các shell kiểu Bourne. Vì vậy, bạn có thể chia sẻ chúng trên ~/.zshrc, ~/.bashrc, ~/.kshrc, ~/.shrc, miễn là họ có ý nghĩa trong tất cả các vỏ.

Điều tương tự cũng xảy ra đối với các định nghĩa biến và định nghĩa hàm, miễn là bạn sử dụng tập hợp con của cú pháp được hỗ trợ trong tất cả các shell.

Nếu bạn không sử dụng các phiên bản của zsh cũ hơn 4.0, bạn có thể đặt tất cả các định nghĩa không xác định shell của mình vào một tệp có tên (giả sử) ~/.common.rc.sh, trong đó dòng đầu tiên là

emulate -LR sh 2>/dev/null

Điều này nói với zsh chỉ mong đợi cú pháp tương thích sh trong tệp này. Sau đó, nguồn mà tập tin gần đầu ~/.bashrc, ~/.bashrc, ~/.kshrcvà vân vân.

Đây là cơ bản những gì tôi làm. Ví dụ, tôi có mã hơi phức tạp mà tạo ra một bí danh cho lsvới các tùy chọn yêu thích của tôi tùy thuộc vào những gì có sẵn ( --color, -G, -F, vv); đó là bất khả tri, nên đi vào .common.rc.sh. Tôi cũng có bí danh phụ thuộc vỏ, như thế alias zcp='zmv -C'đi vào .zshrc.


1
Nếu tôi đặt một /bin/shshebang ở đầu tập tin bí danh của mình thì nó có hoạt động như tôi dự định cho tất cả các shell không?
Zameer Manji

1
@ZameerManji Không, đừng đặt một #!dòng: đây không phải là một tập lệnh độc lập, nó chỉ có thể có nguồn gốc trong một tập lệnh khác. #!không thay đổi hành vi của shell nào.
Gilles 'SO- ngừng trở nên xấu xa'

3
Một sự khác biệt nhỏ mà tôi tìm thấy là zsh aliasxử lý một đối số bắt đầu bằng việc +giới thiệu một tùy chọn như -muốn, do đó alias +=somethingphải được viết như alias -- +=somethingtrong zsh. Đừng nghĩ emulatethay đổi điều đó.
Mikel

Hãy cẩn thận ~/.shrcvì Bourne Shell có triển khai bí danh mạnh nhất nhưng zshsử dụng tên tùy chọn không tương thích. alias -gtạo ra một bí danh liên tục $HOME/.globalsvới Bourne Shell. Chia sẻ định nghĩa bí danh chỉ an toàn miễn là bạn sử dụng không nhiều hơn các tính năng POSIX.
schily

2

zsh's aliascho phép các bí danh toàn cầu, trong khi bashs chỉ được mở rộng ở đầu dòng.

Trong zsh:

alias -g L="| less -FRX"

Sau đó bạn có thể làm:

verbose-command L

Xem ở đây để xem danh sách các bí danh toàn cầu hữu ích.


Gọi tất cả các bí danh mở rộng là bí danh "toàn cầu" là một ý tưởng thực sự tồi tệ vì có một khái niệm bí danh địa phương được giới hạn trong một thư mục cụ thể trong khi các bí danh toàn cầu kể từ 38 năm áp dụng cho các bí danh độc lập. Khái niệm này có từ năm 1980 từ UNOS và được triển khai trong Bourne Shell kể từ 6 năm. UNOS cũng đã giới thiệu tất cả các bí danh mở rộng vào năm 1980, zsh có thể đã thực hiện một số nghiên cứu để tránh kiểu đụng độ này. Xem schillix.sourceforge.net/man/man1/bosh.1.html
schily
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.