小编geo*_*ock的帖子

如何将 which(1) 与系统的默认 $PATH 一起使用?

我想使用which系统的默认路径,忽略用户 shell 配置文件中的任何修饰。

动机

我正在尝试编写一个脚本来查找系统的 Ruby 二进制文件。许多 Ruby 开发人员使用 Ruby 版本管理器,它会~/.rvm/bin在他们的$PATH. 我想绕过这个并使用系统附带的 Ruby 版本,或者是通过系统的包管理器安装的。

当前解决方案

这是我迄今为止尝试过的:

$ env -i sh -c "which ruby"
Run Code Online (Sandbox Code Playgroud)

这没有输出,并以 1 退出。我希望它可以工作,因为路径包含/usr/bin,并且我的系统附带了一个 Ruby 二进制文件/usr/bin/ruby

$ env -i sh -c "echo \$PATH"
/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:.
$ which -a ruby
# ...
/usr/bin/ruby
Run Code Online (Sandbox Code Playgroud)

一些额外的细节:

  • env -s bash -c "which ruby" 也没有找到任何东西。
  • env -i zsh -c "which ruby"确实找到了/usr/bin/ruby,但我不能依赖zsh.
  • 使用完整路径which(以确保我使用的是二进制文件,而不是内置的 shell)没有任何区别。

我的环境

我在 OS X …

path environment-variables which

5
推荐指数
1
解决办法
718
查看次数

标签 统计

environment-variables ×1

path ×1

which ×1