无法在ruby脚本中cd

时间:2014-01-25 19:11:35

标签: ruby

任何人都可以解释为什么以下代码段不起作用吗?

@t=`mktemp -d`
puts @t
at_exit {system "rm -rf #{@t}"}

begin
  Dir.chdir @t
rescue
  puts $!
  sleep 2
  retry
end

基本上,甚至没有重复尝试cd新创建的临时目录,但是当代码在retry循环中时,我完全可以cd进入一个不同的终端。 (at_exit部分有效 - 如果我使用retry中断Ctrl-C循环,则会删除目录。

我甚至尝试在Dir.chdirFileUtils.cd之间切换并使用多个版本的ruby(> = 1.9.3)运行脚本,但都无济于事。

1 个答案:

答案 0 :(得分:2)

您需要在已评估的shell命令mktemp -d上调用chomp,否则Dir.chdir会尝试将目录更改为具有换行符的目录

t = `mktemp -d`
t #=> /tmp/tmp.4g680eJndT
Dir.chdir t.chomp #Note that you need to strip the new line character that comes with the evaluated shell command
Dir.pwd #=> /tmp/tmp.4g680eJndT