清理路径以防重复

问题描述 投票:0回答:1

我已经定了

typeset -aU path

这有助于避免我的路径中出现重复。如果我将其添加到路径末尾,则不会添加重复项:

path+=~/bin
path+=~/foo
path+=~/bin

此后,我的 PATH 只包含 bin 目录的一份副本。

如果我在 PATH 的开头放置一个目录(很少这样做,但有时是必要的),即

PATH=~/bin:$PATH

我最终会在我的 PATH 中获得

bin
目录的额外副本。在这种情况下是否也可以自动删除重复的目录?

我可以在辅助数组的帮助下手动强制执行此操作,即

temppath=($path)
path=($temppath)

但我想知道是否有更简单的方法来做到这一点。

path zsh
1个回答
0
投票

显然,可以为一组绑定参数(如

-U
path
)中的每个变量设置
PATH
(唯一)属性。无论如何修改
path
/
PATH
,这都应该强制唯一性:

typeset -U PATH path

对于

path
-a
(数组)和
-T
(捆绑)
属性已设置 - 可以添加它们,但不需要。 对于您想要表现得像
PATH
的新变量,声明将如下所示:

typeset -aUT LD_LIBRARY_PATH ld_library_path

测试:

=> typeset -aUT PATH path
=> PATH=/usr/bin
=> path+=~/bin
=> typeset -p path
typeset -aUT PATH path=( /usr/bin /Users/me/bin )
=> path+=~/foo
=> path+=~/bin
=> typeset -p path
typeset -aUT PATH path=( /usr/bin /Users/me/bin /Users/me/foo )
=> PATH=~/bin:$PATH
typeset -aUT PATH path=( /Users/me/bin /usr/bin /Users/me/foo )
=> path=(~/foo $path)
typeset -aUT PATH path=( /Users/me/foo /Users/me/bin /usr/bin )

奖励 - 这将从

path
中删除不存在和无效的条目:

=> path=($^~path(/N))
=> typeset -p path   
typeset -aUT PATH path=( /Users/me/bin /usr/bin )

我的Mac在

/etc/paths.d
中有一些额外的条目,这是清理它们的方法。

© www.soinside.com 2019 - 2024. All rights reserved.