为什么 Ruby 对 'which' 命令给我不同的答案



我需要指向一个可执行路径,我尝试在IRB中使用这个:

%x( which wkhtmltopdf )
#"/home/james/.rbenv/versions/2.2.2/bin/wkhtmltopdfn"

但是当我在命令行中输入命令时,我得到:

 % which wkhtmltopdf  
 #/usr/local/bin/wkhtmltopdf

我想这是两个问题:

1)为什么ruby给出了不同的答案?

2)有办法得到命令行答案在ruby?

在ruby环境中,您在Bundler的上下文中执行,它有效地将路径作为继承rbenv的登录变量覆盖。

看起来您以前运行过gem install wkhtmltopdf-binary。这将覆盖您在该路径上使用的任何系统安装。

查看Login Shell Blogpost获取更多信息。

如果您启动了一个新的shell,它可能不会继承rbenv环境:

%x(bash -l which wkhtmltopdf)

或者,您可以获取路径上的所有实例,然后过滤掉结果,使其不包含rbenv。(确切代码未经测试)

all_binaries = %x(which -a wkhtmltopdf).split
original_binary = ""
all_binaries.each do |bin|
  if not s.contains? "rbenv"
    original_binary = bin
    # Will break on the first instance which isn't within the rbenv.
    break 
  end
end

我设法解决了2)

`which wkhtmltopdf`
#"/usr/local/bin/wkhtmltopdfn"

相关内容

最新更新