如何使用反引号运行“pushd”?

时间:2012-05-24 14:46:32

标签: ruby

如何使用反引号运行pushdpopd

每当我在反引号中运行pushd /tmp时,我都会收到错误:

"No such file or directory - pushd /tmp"

2 个答案:

答案 0 :(得分:10)

Ruby shell-outs(反引号)每个都在一个新的子shell中运行,所以它可能不像你想的那样工作:

a = `pwd`
`cd '/tmp'`
b = `pwd`
b == a         # => true
b == "/tmp"    # => false

另外,您确定pushd在您的shell中有效吗?如果你想要一些比反引号语法更有用的东西,也许可以看看使用ruby的systempopen3

Dir#chdir接受一个阻止。以下是来自the docs的示例,如果您只需要在目录中运行某些命令然后更改回来:

Dir.chdir("/var/spool/mail")
puts Dir.pwd
Dir.chdir("/tmp") do
  puts Dir.pwd
  Dir.chdir("/usr") do
    puts Dir.pwd
  end
  puts Dir.pwd
end
puts Dir.pwd

答案 1 :(得分:4)

你不能用反引号那样使用 pushd ; pushd 是Bash内置的,而不是可执行文件。但是,您可以使用Ruby Shell模块获得类似的功能。

require 'shell'
shell = Shell.new
shell.pushd '/tmp'
shell.popd