Đáng để chuyển sang zsh để sử dụng thông thường? [đóng cửa]


192

Trình bao mặc định trong Mac OS X là bash, tôi thường rất vui khi được sử dụng. Tôi chỉ coi đó là điều hiển nhiên. Sẽ thật sự tốt nếu nó tự động hoàn thành nhiều thứ hơn , và tôi đã nghe những điều tốt về zshvấn đề này. Nhưng tôi thực sự không có xu hướng dành hàng giờ để thay đổi cài đặt để cải thiện việc sử dụng dòng lệnh của mình với một lượng nhỏ, vì cuộc sống của tôi trên dòng lệnh không tệ lắm.

(Như tôi hiểu nó, bash cũng có thể được cấu hình để tự động hoàn thành một cách thông minh hơn. Đó là cấu hình mà tôi không thích lắm.)

Chuyển sang zsh, ngay cả trong một số ít trường hợp, làm cho cuộc sống của tôi dễ dàng hơn? Hoặc nó chỉ là một vỏ tốt hơn nếu bạn dành thời gian để tìm hiểu lý do tại sao nó tốt hơn? (Ví dụ cũng sẽ rất hay :))


@ Rodney Amato & @ Vulcan Eager đưa ra hai lý do chính đáng để lần lượt gắn bó bashvà chuyển sang zsh. Có vẻ như tôi sẽ phải điều tra cả hai! Ồ tốt:)

Có ai có ý kiến ​​từ cả hai phía của cuộc tranh luận?


14
Vì zsh là (gần như) một superset của bash, bạn có thể bắt đầu với việc chuyển sang zsh và sử dụng nó như bash. Sau đó, bạn có thể tìm hiểu đá quý zsh một chút tại một thời điểm.
orip

Nếu bạn có một chút tùy chỉnh bash và bạn thường sử dụng vỏ bên trong emacs, điều này có vẻ không tầm thường. Tôi đã đăng câu hỏi liên quan: stackoverflow.com/questions/13326879/ từ
justingordon

Điều duy nhất tôi không thích về zsh là (ít nhất là trên Ubuntu) bạn sẽ phải tự cấu hình nó ngay lần đầu tiên bạn khởi động nó (thay vì nó cung cấp một số mặc định lành mạnh mà sau này bạn có thể sử dụng). Nếu bạn có thể vượt qua điều đó, zsh là tốt nhất!
zrajm

Câu trả lời:


68

Đối với sử dụng thông thường, có lẽ tốt hơn hết bạn nên gắn bó với bash và chỉ cần cài đặt hoàn thành bash.

Cài đặt nó khá dễ dàng, lấy bash-xong-20060301.tar.gz từ http://www.caliban.org/bash/index.shtml#completion và giải nén nó với

tar -xzvf bash-completion-20060301.tar.gz

sau đó sao chép tệp bash_completion / bash_completion vào / etc với

sudo cp bash_completion/bash_completion /etc

Nó sẽ nhắc bạn nhập mật khẩu của bạn. Bạn có thể sẽ muốn tạo một thư mục /etc/bash_completion.d cho bất kỳ tập lệnh hoàn thành bổ sung nào (ví dụ: tôi có tập lệnh hoàn thành git trong đó).

Khi việc này được thực hiện, bước cuối cùng là đảm bảo tệp .bash_profile trong thư mục chính của bạn có

if [ -f /etc/bash_completion ]; then
     . /etc/bash_completion 
fi

trong đó để tải tập tin hoàn thành khi bạn đăng nhập.

Để kiểm tra, chỉ cần mở một thiết bị đầu cuối mới và thử hoàn thành trên cvs và nó sẽ hiển thị cho bạn các tùy chọn cvs trong danh sách hoàn thành.


Tôi đã thử ở trên, tuy nhiên sau đó bất cứ khi nào tôi bắt đầu bash, tôi nhận được 4 lỗi "toán tử đơn nguyên" và 4 lỗi "quá nhiều đối số".
AnnanFay

12
Nếu bạn đang sử dụng homebrew trên OSX, bạn có thể chạy brew install bash-completion.
Nathan Villaescusa

3
Bash-Hoàn thành2 là tốt hơn! Trên OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin

85

Cá nhân, tôi yêu zsh.

Nói chung, bạn có thể sẽ nhận thấy sự khác biệt giữa nó và bash, cho đến khi bạn muốn nhanh chóng làm những việc như khai thác đệ quy:

  • **/*.c ví dụ.

Hoặc sử dụng các bí danh hậu tố để liên kết các pross cụ thể với các hậu tố khác nhau, để bạn có thể "thực thi" chúng trực tiếp. Bí danh dưới đây cho phép bạn "chạy" tệp nguồn C tại dấu nhắc bằng cách nhập ./my_program.c- đơn giản sẽ hoạt động chính xác như khi bạn nhập vim ./my_program.c. (Sắp xếp tương đương với nhấp đúp vào biểu tượng của tệp.)

  • alias -s c=vim

Hoặc in tên của các tệp được sửa đổi ngày hôm nay:

  • print *(e:age today now:)

Bạn có thể có thể làm tất cả những điều này trong bash, nhưng kinh nghiệm của tôi với zsh là nếu có điều gì đó tôi muốn làm, tôi có thể tìm thấy nó trong những người yêu thích zsh . Tôi cũng thấy cuốn sách ' Từ Bash đến Z-Shell ' thực sự hữu ích.

Chơi với tâm trí số lượng lớn các tùy chọn cũng rất vui!


1
Hai ví dụ đầu tiên ở đây không có ý nghĩa gì với tôi (một người dùng bash bình thường khi xem xét chuyển sang zsh) - bạn có thể giải thích "nghĩa cầu đệ quy" nghĩa là gì, hoặc ý của bạn là "liên kết các pross cụ thể với các hậu tố khác nhau" không?
aaronsnoswell

5
@aaronsnoswell: "đệ quy đệ quy" có nghĩa là tìm kiếm một thư mục con và tất cả các thư mục con của nó cho các tệp có tên khớp với một mẫu cụ thể. Bash không làm điều đó theo mặc định; bạn findhoặc locateđể tìm kiếm đệ quy. Nhưng một khi bạn để chương trình khác thực hiện tìm kiếm, bạn sẽ mất ranh giới giữa các tên (trừ khi bạn cẩn thận) cũng như truy cập vào các khả năng kết nối nội bộ của shell và về cơ bản phải thực hiện với những gì chương trình khác cung cấp, hoặc ống đầu ra của mình thông qua một chương trình như grep, awkhoặc sed(tất cả khá phức tạp theo đúng nghĩa của họ).
cHao

6
Ngày nay, bạn có thể đặt globstartùy chọn trong bash để cho phép tìm kiếm đệ quy như đã đề cập ở trên. Mặc dù khá chắc chắn rằng đó không phải là trường hợp khi câu trả lời này được viết.
cHao

Với glob_star_shorttrong zsh, bây giờ bạn có thể làm **.c, được hiểu là **/*.c.
PythonNut

Tôi sử dụng zsh 5.3và nhận command not found: agevớiprint *(e:age today now:)
Timo

38

Chuyển sang zsh. Bạn sẽ có quyền truy cập vào:

  1. zmv: Bạn có thể làm: zmv '(*).mp3' '$1.wma'cho hàng ngàn tệp.
  2. zcalc: Máy tính cực kỳ thoải mái, tốt hơn bc.
  3. zparseopts: One-liner để phân tích các tùy chọn phức tạp tùy ý được cung cấp cho tập lệnh của bạn.
  4. autopushd: Bạn luôn có thể làm popdsaucd để thay đổi trở lại thư mục trước đó của bạn.
  5. Hỗ trợ điểm nổi. Nó là cần thiết theo thời gian.
  6. Hỗ trợ băm. Đôi khi chúng chỉ là một tính năng chính.

17
Ví dụ cho zmv phải là zmv '(*). Mp3' '$ 1.wma'. Hãy sửa nó, trình bày bất cẩn như vậy có thể gây nhầm lẫn và bực bội cho người thiếu kinh nghiệm.
qed

5
@TravisBear autoload zcalc; zcalc(mặc dù bản thân tôi chỉ cần gõ pythonbất cứ khi nào tôi cần một máy tính).
Francisco

9
"autopushd: Bạn luôn có thể thực hiện popd sau cd để thay đổi trở lại thư mục trước đó." Không phải là tương đương với chỉ cd -?
minhaz1

4
zmvzcalckhông có sẵn trong hộp. Không rõ ràng đó zmvchỉ là đổi tên các tập tin; Tôi nghĩ rằng bạn có thể đã được chuyển đổi định dạng. Tôi không biết "băm" hỗ trợ thậm chí có nghĩa là gì. Bài đăng này có vẻ như chỉ "hữu ích" cho những người đã biết zsh.
mở

1
@Mark Trong trường hợp này, "băm" đồng nghĩa với "mảng kết hợp". bash4 đã được phát hành chỉ một vài tháng trước câu trả lời này.
chepner

13

Nếu tất cả những gì bạn muốn sử dụng ZSH để hoàn thành tốt hơn, cấu hình khá dễ dàng. Đặt cái này trong ~ / .zshrc:

autoload -U zutil      # [1]
autoload -U compinit   # [2]
autoload -U complist   # [3]
compinit

Tuy nhiên, đáng để kiểm tra tất cả các tính năng tuyệt vời khác của ZSH. Ví dụ trên sẽ cung cấp cho bạn một dấu nhắc khá đơn giản với sự hoàn thành tốt. Nếu bạn không muốn sử dụng các cấu hình, nhưng muốn xem ZSH có thể làm gì cho bạn, Google cho "zshrc" và bạn sẽ sẵn sàng sử dụng các cấu hình để bắt đầu.


3
Những loại điều này sẽ thêm hoàn thành cho? Tôi không thích thêm ngẫu nhiên mà không biết nó đang làm gì.
mở

6

zsh có một điều cấu hình gui giao diện điều khiển. Bạn có thể thiết lập nó khá nhanh chóng và dễ dàng mà không cần phải sử dụng tập tin cấu hình. Tôi không nghĩ rằng bạn sẽ cần nhiều thời gian để thiết lập nó, có thể là 10 giây chỉ với việc sử dụng mặc định, vì vậy hãy tiếp tục và dùng thử.


10
Làm thế nào để bạn truy cập "gui console" này?
mở

Đó thường là điều đầu tiên bạn nhìn thấy khi bạn tải zshmà không có bất kỳ dấu chấm liên quan nào. Để có được nó một cách thủ công, hãy thửautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz

3

Staale đang nói về một trình hướng dẫn như chương trình (CUI) sẽ tự động chạy lần đầu tiên khi bạn chạy zsh. Chỉ cần trả lời một số câu hỏi, xem / thay đổi mặc định và cấu hình của nó cho bạn.

IBM DB2 có tài nguyên tuyệt vời trên zsh.

Tôi đã không sử dụng các tính năng rất tiên tiến và cho đến nay tôi không gặp phải sự khác biệt nghiêm trọng nào có thể cản trở ai đó đến từ bash.

Vài ví dụ:

  • !? mẫu <Tab> sẽ tự động hoàn thành đến lệnh cuối cùng trong mẫu khớp lịch sử. Rất hữu ích.

  • Bạn có thể định cấu hình lời nhắc trên RHS. Một cách sử dụng là giữ một dấu nhắc chiều rộng cố định ở phía bên trái để tất cả các lệnh thẳng hàng trong khi hiển thị pwd (hoặc bất cứ thứ gì có chiều rộng thay đổi) như lời nhắc bên phải.

  • Bạn có thể chuyển hướng đầu vào từ nhiều tệp (chưa thử điều này): cat <file1 <file2 <file3

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.