Cấu hình zsh - xuất hay không xuất?


22

Khi đặt biến trong tôi ~/.zshrccó thể sử dụngexport

export PATH=/some/path

hay không

PATH=/some/path

Làm thế nào để những khác nhau và tôi nên sử dụng?


Các biến môi trường cũng được sử dụng bởi các shell không tương tác (giả sử, một kịch bản shell bạn đã viết) nên đi vào .zshenv.
Francisco

~/.zshenvnguồn gốc của vỏ đăng nhập là tốt? Có nên PATHđịnh nghĩa ở đó không?
jordelver

1
PATHcó lẽ là ví dụ tốt nhất về một biến cần được xác định bên trong ~/.zshenv, tệp này được lấy nguồn bởi bất kỳ phiên zsh nào (trừ khi bạn sử dụng một số tùy chọn để tắt biến đó). Xem man zshđể xem xét các tập tin có nguồn gốc và theo thứ tự.
Francisco

Ok, cảm ơn @Francisco tôi sẽ đọc trang người đàn ông.
jordelver

Câu trả lời:


21

Nếu bạn muốn các chương trình chạy từ zsh để xem var, hãy xuất nó.
Đối với đường dẫn, bạn có thể muốn xuất.
Thay vì export PATH=/some/pathbạn có thể muốn export PATH="$PATH:/some/path", trừ khi bạn có ý định xóa hoàn toàn đường dẫn đặt trước hệ thống.


Thật tuyệt, cảm ơn. Bây giờ tôi sẽ sử dụng xuất khẩu như một quy tắc chung.
jordelver

20

Demure đã trả lời câu hỏi cụ thể của bạn. Tuy nhiên đây là một zshcâu hỏi và về PATH. Vì vậy, đây là một điểm khác: Bên cạnh biến tiêu chuẩn $PATH, còn $pathcó một mảng. Ở đây bạn thấy sự khác biệt (dấu hai chấm hoặc không ...):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

Cả hai biến thể được tự động giữ đồng bộ. Vì vậy, lợi ích của việc sử dụng một mảng là gì?

  • Cái sau bạn có thể khai báo qua typeset -U pathđể "chỉ giữ lại lần xuất hiện đầu tiên của mỗi giá trị trùng lặp" (từ man zshbuiltins). Điều đó có nghĩa là điều này giữ cho đường dẫn của bạn sạch sẽ, ngay cả khi bạn liên tục tìm nguồn của mình ~/.zshrc(vì bạn đã thay đổi nó hoặc bất cứ điều gì) và không làm lộn xộn nó với cùng một giá trị lặp đi lặp lại.
  • Bạn có thể sử dụng path+=(/new/path)để thêm một thư mục mới vào PATH của bạn. Để xóa phần tử, bạn phải sử dụng một số thủ thuật, xem, ví dụ: https://stackoverflow.com/q 43235355/2037712 hoặc http://www.zsh.org/mla/users//2005/msg01132.html
  • Bạn có thể dễ dàng lặp lại các yếu tố trong PATH thông qua for i ($path) { print $i # or do something else }

Cuối cùng, đây là một đoạn trích từ cấu hình của tôi:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH

Cảm ơn bạn, đó thực sự là một câu hỏi tiếp theo. Tôi sẽ xem xét việc quản lý đường dẫn của tôi bằng cách sử dụng pathchứ không phải PATH.
jordelver

1
Vui mừng khi biết rằng tôi đã sợ rằng tôi là OT. Btw. Một lợi thế khác tôi quên: Bạn có thể dễ dàng lặp lại các yếu tố với for i ($path) { print $i # or do something else }.
mpy
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.