PATH'ime zsh cinsinden bir dizin eklemenin bir yolu var mı?


15

Zsh'de PATH'ime bir dizin eklemeniz için kolay bir yol var mı? (veya daha genel olarak herhangi bir ortam değişkeni). Denedim:

PATH+=/my/directory

... ama bu iki kez yapılırsa, iki kez eklenir.


2
@uther, bu başka bir soru bash için olduğu için bu bir kopya değil, bu da bu sorunu çözmek için kendi yolu olan zsh için.
Stéphane Chazelas

Yanıtlar:


32

In diziye zsh $PATHbağlıdır (bkz. typeset -T) $path. Bu diziyi aşağıdakilerle benzersiz değerlere sahip olmaya zorlayabilirsiniz :

typeset -U path

Ardından, yolu şu yolla ekleyin:

path+=(~/foo)

Zaten oradaysa endişelenmeden.

Önden eklemek için şunları yapın:

path=(~/foo "$path[@]")

veya:

path[1,0]=~/foo

eğer ~/foozaten varsa , $pathonu öne taşıyacak.


Bunu mu demek istediniz typeset -Ug path? Ben kullandığınızda typeset -U pathbenim de ~/.zshrcdosyaya, hep zshrc çalışırken hiçbir şey yolunda olma konusunda bir hata geri almak
kalbasit

@eMxyzptlk, garip. -gkapsamı kısıtlamaktan kaçınmaktır, ancak ~/.zshrckapsam zaten globaldir. Ayrıca, zshboş bir şikayet hakkında hiç görmedim $PATH(tabii ki komut bulunamadı hataları hariç).
Stéphane Chazelas

3

export -U PATH=~/foo${PATH:+:$PATH}Başlangıç ​​dosyalarınızdan birine ekleyin . -UDiziler veya belirli bir değerin sadece ilk geçtiği tutan :yol gibi sınırlandırılmış değişkenler.


-3

Bunun gibi bir şey yapmanız gerekecek:

if echo $PATH | grep :newpath: ; then doIfPresent; else doIfMissing; fi

Bu yalnızca newpath bu iki ':' ile sınırlandırılmışsa , başlangıçta veya bitiminde benzer şekilde düşünülmesi gerekir.

Urgh.


1
Bunu yalnızca Bourne / POSIX özellikleriyle kabuğun içinde yapabilirsiniz. Bu, baş ağrılarını önler (en azından bunu yapın echo "$PATH": her zaman değişken ikamelerin etrafına çift tırnak koyun ). case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac
Gilles 'SO
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.