任何人都可以解释为什么以下代码段不起作用吗?
@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.chdir
和FileUtils.cd
之间切换并使用多个版本的ruby(> = 1.9.3)运行脚本,但都无济于事。
答案 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