如何使用反引號運行pushd
和popd
?如何使用反引號運行「pushd」?
每當我在反引號運行pushd /tmp
我得到一個錯誤:
"No such file or directory - pushd /tmp"
如何使用反引號運行pushd
和popd
?如何使用反引號運行「pushd」?
每當我在反引號運行pushd /tmp
我得到一個錯誤:
"No such file or directory - pushd /tmp"
紅寶石殼奏(反引號)在一個新的子shell每次運行,因此它不會在你所想也許工作:
a = `pwd`
`cd '/tmp'`
b = `pwd`
b == a # => true
b == "/tmp" # => false
而且,你肯定pushd
作品在你的殼呢?如果你想要比反引號語法更有用的話,可以看看使用ruby的system
或popen3
。
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
不能使用PUSHD與反引號這樣; pushd是Bash內建的,不是可執行文件。但是,您可以使用Ruby Shell模塊獲得類似的功能。
require 'shell'
shell = Shell.new
shell.pushd '/tmp'
shell.popd
我已經通過存儲Dir.pwd成一個字符串,運行Dir.chdir然後再次調用Dir.chdir彈出回到舊目錄解決該問題的工作。不如推/彈出IMO的優雅。還有一個Shell類,它有pushd和popd,但我找不到有關如何使用它的很多文檔。 –
'Dir.chdir'接受一個塊 - 它執行該塊,然後返回到前一個目錄 - [見文檔](http://ruby-doc.org/core-1.9.3/Dir.html#method-c -chdir) – arcresu
使用此鏈接更新了我的答案 – arcresu