只有在zsh中尚无目录时,才可以将目录添加到我的PATH中吗?


15

在zsh中,是否有一种简单的方法可以将目录添加到我的PATH中(如果该目录尚不存在)?(或更笼统地说,是任何环境变量)。我试过了:

PATH+=/my/directory

...但是如果执行两次,它将被添加两次。


2
@uther,这不是重复的,因为另一个问题是关于bash的,而这个问题是针对zsh的,它有解决这个问题的独特方法。
斯特凡Chazelas

Answers:


32

In zsh $PATH与数组绑定(请参阅参考typeset -T$path。您可以通过以下方式强制该数组具有唯一值:

typeset -U path

然后,添加路径:

path+=(~/foo)

不必担心它是否已经存在。

要将其添加到前面,请执行以下操作:

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

要么:

path[1,0]=~/foo

如果~/foo已经在$path那,它将移到前面。


不是typeset -Ug path吗 当我typeset -U path~/.zshrc文件中使用时,我总是会得到一个错误,提示zshrc运行时路径中没有任何内容
kalbasit13年

@eMxyzptlk,很奇怪。-g为避免限制范围,但在中~/.zshrc,范围已是全局的。另外,我从来没有见过zsh关于空的抱怨$PATH(当然除了找不到命令的错误以外)。
斯特凡Chazelas

3

添加export -U PATH=~/foo${PATH:+:$PATH}到您的启动文件之一。该-U保持仅在数组或某些:定界变量(例如PATH)中保留值的首次出现。


-3

您必须执行以下操作:

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

仅当newpath以两个':'分隔时,此方法才有效,需要类似地考虑在开头或结尾处的情况。


1
您可以仅使用Bourne / POSIX功能在外壳内部执行此操作。这样可以避免引起麻烦(至少使echo "$PATH"总是在变量替换前后加上双引号)。case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac
吉尔斯(Gillles)“所以-别再邪恶了”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.