我已经定了
typeset -aU path
这有助于避免我的路径中出现重复。如果我将其添加到路径末尾,则不会添加重复项:
path+=~/bin
path+=~/foo
path+=~/bin
此后,我的 PATH 只包含 bin 目录的一份副本。
如果我在 PATH 的开头放置一个目录(很少这样做,但有时是必要的),即
PATH=~/bin:$PATH
我最终会在我的 PATH 中获得
bin
目录的额外副本。在这种情况下是否也可以自动删除重复的目录?
我可以在辅助数组的帮助下手动强制执行此操作,即
temppath=($path)
path=($temppath)
但我想知道是否有更简单的方法来做到这一点。
显然,可以为一组绑定参数(如
-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
中有一些额外的条目,这是清理它们的方法。