如何从 Zsh 中的 $PATH 中删除路径并将其添加到开头而不重复?
Posted
技术标签:
【中文标题】如何从 Zsh 中的 $PATH 中删除路径并将其添加到开头而不重复?【英文标题】:How can I remove a path from $PATH in Zsh and add it to the beginning without duplication? 【发布时间】:2013-04-17 01:41:25 【问题描述】:我有:
PATH=/bar:/foo
我想要:
PATH=/foo:/bar
我不想要:
PATH=/foo:/bar:foo
所以我在想,给定默认路径是PATH=/bar
,我可以修改$path
(即$PATH
作为关联数组):
function prepend_to_path()
unset $path[(r)$1]
path=($1 $path)
prepend_to_path /foo
但这抱怨:
prepend_to_path:unset:1: not enough arguments
已经太久了,我什至不记得(r)
的用途,但没有它 (unset $path[$1]
) 我明白了:
prepend_to_path:1: bad math expression: operand expected at `/home/nerd...'
我做错了什么?
【问题讨论】:
【参考方案1】:您可以将函数的主体替换为:
path=($1 $(@)path:#$1)
相关回答:https://***.com/a/3435429/1107999
【讨论】:
【参考方案2】:这也有效(可以说,几个月后你再看它时会更容易阅读):
prepend_to_path ()
path[1,0]=$1
typeset -U path
typeset -U
将自动对数组进行去重,只保留每个元素的第一次出现。
既然export
等价于typeset -gx
,你也可以export -U path
一石二鸟。
编辑: typeset -U
只需应用于特定数组一次,因此可以在 shell 启动的某个地方执行此操作,并从上面的函数中删除该行。
【讨论】:
以上是关于如何从 Zsh 中的 $PATH 中删除路径并将其添加到开头而不重复?的主要内容,如果未能解决你的问题,请参考以下文章
无法检测到 shell 配置文件 (zsh - ~/.zshrc)