首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查重复路径条目和排除可执行文件的Zsh函数

检查重复路径条目和排除可执行文件的Zsh函数
EN

Server Fault用户
提问于 2023-04-10 23:02:05
回答 1查看 67关注 0票数 0

这发生在许多系统上,我希望有人有一个解决方案。

路径环境变量是安全问题的一个主要部分。为了理智起见,.zshrc的路径部分如下所示:

代码语言:javascript
运行
复制
# 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。这个工具既可以增加安全性,也可以解决糟糕的安装问题。

也就是说,我想要一个这样的工具:

代码语言:javascript
运行
复制
$ checkpath
.../p/na/tree_sitter_na/node_modules/.bin/ssh occudes /usr/bin/ssh
$
EN

回答 1

Server Fault用户

发布于 2023-04-14 06:15:39

zsh中,type -a将列出PATH中出现的所有命令。列表中的第一个是“活动”匹配:

代码语言:javascript
运行
复制
> 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数组引用可执行搜索路径:

代码语言:javascript
运行
复制
> print $PATH
/usr/bin:/bin
> path+=/sbin
> print $PATH
/usr/bin:/bin:/sbin
> print -l $path
/usr/bin
/bin
/sbin

默认情况下,PATHpath是以这种方式设置的。其他变量可以配置为绑定变量,例如typeset -T LD_LIBRARY_PATH ld_library_path

-U选项typeset可用于设置变量,使其不包含重复项:

代码语言:javascript
运行
复制
> 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 膨胀改性剂,以从相对路径获取绝对路径。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1128391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档