Có một cách dễ dàng trong zsh để thêm một thư mục vào PATH của tôi chỉ khi nó chưa có mặt? (hoặc, nói chung hơn, bất kỳ biến môi trường). Tôi đã thử:
PATH+=/my/directory
... nhưng nếu điều đó được thực hiện hai lần, nó sẽ được thêm hai lần.
Có một cách dễ dàng trong zsh để thêm một thư mục vào PATH của tôi chỉ khi nó chưa có mặt? (hoặc, nói chung hơn, bất kỳ biến môi trường). Tôi đã thử:
PATH+=/my/directory
... nhưng nếu điều đó được thực hiện hai lần, nó sẽ được thêm hai lần.
Câu trả lời:
Trong zsh
$PATH
được gắn (xem typeset -T
) vào $path
mảng. Bạn có thể buộc mảng đó có các giá trị duy nhất với:
typeset -U path
Và sau đó, thêm đường dẫn với:
path+=(~/foo)
Không phải lo lắng nếu nó đã có.
Để thêm nó ở phía trước, làm:
path=(~/foo "$path[@]")
hoặc là:
path[1,0]=~/foo
nếu ~/foo
đã có trong $path
đó sẽ di chuyển nó ra phía trước.
typeset -Ug path
sao? Khi tôi sử dụng typeset -U path
trong ~/.zshrc
tệp của mình , tôi luôn gặp lỗi về không có gì trong đường dẫn trong khi zshrc đang chạy
-g
là để tránh giới hạn phạm vi, nhưng trong ~/.zshrc
, phạm vi là toàn cầu. Ngoài ra, tôi chưa bao giờ thấy zsh
phàn nàn về một sản phẩm nào $PATH
(ngoại trừ lệnh không tìm thấy lỗi trong khóa học).
Bạn sẽ phải làm một cái gì đó như:
if echo $PATH | grep :newpath: ; then doIfPresent; else doIfMissing; fi
Điều này chỉ hoạt động nếu newpath
được phân định bu hai ':', cần xem xét các trường hợp khi nó ở đầu hoặc cuối tương tự.
Urgh.
echo "$PATH"
: luôn luôn đặt dấu ngoặc kép xung quanh thay thế biến ). case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac