这在许多系统上都会发生,我希望有人能找到解决方案。
PATH 环境变量是安全问题的主要部分。为了合理起见,路径部分如下.zshrc
所示:
# Set Path
PATH_RUBY="/usr/local/opt/ruby/bin:/usr/local/lib/ruby/gems/3..0/bin"
PATH_TREESITTER="$HOME/p/na/ts/tree_sitter_na/node_modules/.bin"
PATH_CONDA="/usr/local/anaconda3/bin"
PATH_CARGO=".cargo/bin"
PATH_TEX="/usr/texbin:/opt/X11/bin"
PATH_HOME="$HOME/bin:$HOME"
PATH_OSX="/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library
/Apple/usr/bin"
export PATH="$PATH_RUBY:$PATH_CONDA:$PATH_TREESITTER:$PATH_CARGO:$PATH_TEX:$PATH_HOME:$PATH_OSX"
虽然我可以检查路径混合以确保路径中没有重复的完整目录,但是否有人编写了冲突列表函数?我试图防止某些未经检查的工具安装,例如TreeSitter
拥有自己的ssh
命令,该命令将代替后者执行/usr/bin/ssh
。此工具既可以增加安全性,也可以解决安装不当的问题。
也就是说,我想要一个像这样的工具:
$ checkpath
.../p/na/tree_sitter_na/node_modules/.bin/ssh occudes /usr/bin/ssh
$
答案1
在 中zsh
,type -a
将列出 中所有出现的命令PATH
。列表中的第一个是“活动”匹配:
> type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
> cp /bin/ls ~/bin
> type -a ls
ls is /bin/ls
ls is /Users/gairfowl/bin
更多信息这里。
有一些非常有用的功能可以zsh
帮助操纵路径。使用“绑定”变量,可以通过标PATH
量或path
数组引用可执行搜索路径:
> print $PATH
/usr/bin:/bin
> path+=/sbin
> print $PATH
/usr/bin:/bin:/sbin
> print -l $path
/usr/bin
/bin
/sbin
PATH
和path
默认设置为此方式。其他变量可以配置为绑定变量,例如typeset -T LD_LIBRARY_PATH ld_library_path
。
-U
可以使用选项来typeset
设置变量,使它们不包含重复项:
> print $PATH
/usr/bin:/bin
> path+=/sbin
> path+=/sbin
> print $PATH
/usr/bin:/bin:/sbin:/sbin
> typeset -U PATH path
> print $PATH
/usr/bin:/bin:/sbin
您可能还想看看:a
扩展修饰符从相对路径获取绝对路径。