Đặt xác nhận biến $ PATH ở đâu trong zsh?


110

Tôi thích zsh, nhưng tôi không chắc chắn nơi đặt $PATHcác xác nhận biến của tôi và các biến khác? Tôi thấy rằng chúng nằm rải rác giữa các tệp .zshrc .zprofile .bashrc .bash_profilevà đôi khi tăng gấp đôi.

Tôi nhận ra rằng có bất cứ điều gì bên trong bashcác tập tin không có ý nghĩa nhiều khi nhìn thấy như tôi đang sử dụng zsh, nhưng nơi chính xác tôi nên đặt của tôi rvm, python, nodevv bổ sung của tôi $PATH?

Có tệp cụ thể nào mà tôi nên sử dụng không (tức là tệp .zshenvhiện không tồn tại trong cài đặt của tôi), một trong những tệp tôi hiện đang sử dụng hay nó thậm chí có vấn đề gì không?

Câu trả lời:


148

phiên bản tl; dr: sử dụng ~/.zshrc

hãy đọc trang người đàn ông để hiểu sự khác biệt giữa:

~/.zshrc, ~/.zshenv~/.zprofile.


Về nhận xét của tôi

Trong nhận xét của tôi đính kèm với câu trả lời mà kev đưa ra , tôi nói:

Điều này có vẻ không chính xác - / etc / profile không được liệt kê trong bất kỳ tài liệu zsh nào mà tôi có thể tìm thấy.

Điều này hóa ra không chính xác một phần: /etc/profile có thể có nguồn gốc từ zsh. Tuy nhiên , điều này chỉ xảy ra nếu zshđược "gọi là shhoặc ksh"; trong các chế độ tương thích này:

Các tập lệnh khởi động / tắt máy zsh thông thường không được thực thi. Đăng nhập shell source / etc / profile theo sau là $ HOME / .profile. Nếu biến môi trường ENV được đặt trên lệnh gọi, thì $ ENV được lấy sau các tập lệnh hồ sơ. Giá trị của ENV phải chịu sự mở rộng tham số, thay thế lệnh và mở rộng số học trước khi được hiểu là tên đường dẫn. [ man zshall, "Khả năng tương thích" ].

Các liên kết ArchWiki ZSH nói:

Khi đăng nhập, Zsh lấy nguồn các tệp sau theo thứ tự sau:
/ etc / profile
Tệp này được lấy từ tất cả các shell tương thích với Bourne khi đăng nhập

Implys này /etc/profileluôn đọc bởi zshlúc đăng nhập - Tôi đã không có bất kỳ kinh nghiệm với các dự án Arch Linux; wiki có thể đúng với phân phối đó, nhưng nhìn chung thì không đúng. Các thông tin không chính xác so với các trang của nhãn hiệu zsh, và dường như không áp dụng đối với Zsh trên OS X (đường dẫn trong $PATHbộ trong /etc/profilekhông làm cho nó vào buổi zsh của tôi).



Để giải quyết câu hỏi:

chính xác thì tôi nên đặt phần bổ sung rvm, python, node, v.v. vào $ PATH của mình ở đâu?

Nói chung, tôi sẽ xuất khẩu của tôi $PATHtừ ~/.zshrc, nhưng nó có giá trị một chi của zshall trang người đàn ông, đặc biệt là "STARTUP / SHUTDOWN FILES" phần - ~/.zshrcđược đọc cho tương tác vỏ, mà có thể hoặc không thể phù hợp với nhu cầu của bạn - nếu bạn muốn $PATHcho mọi trình zshbao do bạn gọi (cả interactivevà không, cả loginvà không, v.v.), sau đó ~/.zshenvlà một lựa chọn tốt hơn.

Có tệp cụ thể nào mà tôi nên sử dụng không (tức là .zshenv hiện không tồn tại trong cài đặt của tôi), một trong những tệp tôi hiện đang sử dụng hay nó thậm chí có vấn đề gì không?

Có một loạt các tệp được đọc khi khởi động (kiểm tra các mantrang được liên kết ) và có lý do cho điều đó - mỗi tệp có vị trí cụ thể (cài đặt cho mọi người dùng, cài đặt cho người dùng cụ thể, cài đặt cho trình bao đăng nhập, cài đặt cho mọi trình bao, Vân vân).
Đừng lo lắng về việc ~/.zshenvkhông tồn tại - nếu bạn cần, hãy làm cho nó và nó sẽ được đọc.

.bashrc.bash_profileđang không đọc bởi zsh, trừ khi bạn nguồn rõ ràng chúng từ ~/.zshrchoặc tương đương; cú pháp giữa bashzshkhông luôn luôn tương thích. Cả hai .bashrc.bash_profileđều được thiết kế cho bashcài đặt, không phải zshcài đặt.


3
Cảm ơn simont câu trả lời nhiều hơn của bạn. Lạ mà bạn nói .bashrc.bash_profilekhông được đọc bởi zshnhư tôi hiện có của tôi rvmngoài $PATH.bashrc, và tôi pythonbổ sung trong .bash_profile, và cả hai đều được bổ sung tốt. Trong mọi trường hợp, tôi sẽ chuyển tất cả các lần $PATHxuất của mình sang ~/.zshrcvì tất cả zshcấu hình khác của tôi đều được đặt ở đó. Tôi phải thừa nhận rằng, tôi không quá quen thuộc với các loại vỏ khác nhau. Từ việc đọc các liên kết bạn đã đăng, tôi đoán tôi sử dụng một trình bao tương tác, nhưng tôi sẽ đọc thêm để chắc chắn ... Cảm ơn một lần nữa!
stefmikhail

30

Đây là tài liệu từ các trang zsh man trong phần STARTUP / SHUTDOWN FILES.

   Commands  are  first  read from /etc/zshenv this cannot be overridden.
   Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the
   former  affects all startup files, while the second only affects global
   startup files (those shown here with an path starting with  a  /).   If
   one  of  the  options  is  unset  at  any point, any subsequent startup
   file(s) of the corresponding type will not be read.  It is also  possi-
   ble  for  a  file  in  $ZDOTDIR  to  re-enable GLOBAL_RCS. Both RCS and
   GLOBAL_RCS are set by default.

   Commands are then read from $ZDOTDIR/.zshenv.  If the shell is a  login
   shell,  commands  are  read from /etc/zprofile and then $ZDOTDIR/.zpro-
   file.  Then, if the  shell  is  interactive,  commands  are  read  from
   /etc/zshrc  and then $ZDOTDIR/.zshrc.  Finally, if the shell is a login
   shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

Từ đó chúng ta có thể thấy thứ tự các tập tin được đọc là:

/etc/zshenv    # Read for every shell
~/.zshenv      # Read for every shell except ones started with -f
/etc/zprofile  # Global config for login shells, read before zshrc
~/.zprofile    # User config for login shells
/etc/zshrc     # Global config for interactive shells
~/.zshrc       # User config for interactive shells
/etc/zlogin    # Global config for login shells, read after zshrc
~/.zlogin      # User config for login shells
~/.zlogout     # User config for login shells, read upon logout
/etc/zlogout   # Global config for login shells, read after user logout file

Bạn có thể lấy thêm thông tin ở đây .


18

Tôi đã gặp sự cố tương tự (trong lệnh đầu cuối bash hoạt động chính xác nhưng zsh hiển thị lỗi không tìm thấy lệnh)

Giải pháp:


chỉ cần dán bất cứ thứ gì bạn đã dán trước đó vào ~ / .bashrc vào:

~/.zshrc
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.