2012-05-24 37 views

回答

8

紅寶石殼奏(反引號)在一個新的子shell每次運行,因此它不會在你所想也許工作:

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

而且,你肯定pushd作品在你的殼呢?如果你想要比反引號語法更有用的話,可以看看使用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 
+0

我已經通過存儲Dir.pwd成一個字符串,運行Dir.chdir然後再次調用Dir.chdir彈出回到舊目錄解決該問題的工作。不如推/彈出IMO的優雅。還有一個Shell類,它有pushd和popd,但我找不到有關如何使用它的很多文檔。 –

+2

'Dir.chdir'接受一個塊 - 它執行該塊,然後返回到前一個目錄 - [見文檔](http://ruby-doc.org/core-1.9.3/Dir.html#method-c -chdir) – arcresu

+0

使用此鏈接更新了我的答案 – arcresu

4

不能使用PUSHD與反引號這樣; pushd是Bash內建的,不是可執行文件。但是,您可以使用Ruby Shell模塊獲得類似的功能。

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