我正在临时目录中生成一个文件。 如果要生成的文件与现有文件不同,那么我将不更新它并运行命令。如果相同的话,我什么也做不了。
我的代码如下:
errstatus = 0
if FileUtils.identical?('/var/tmp/newfile', '/var/tmp/originalfile')
$stderr.puts "Files are the same, nothing to do"
else
$stderr.puts "Files are different, let's update them."
if FileUtils.cp_r '/var/tmp/newfile', '/var/tmp/originalfile'
$stderr.puts "File copied successfully."
if system('systemcommand1 here')
$stderr.puts "command ran OK"
if system('systemcommand2 here')
$stderr.puts "next command ran ok"
else
$stderr.puts "command 2 failed"
errstatus = 1
end
else
$stderr.puts "command 1 failed"
errstatus = 1
end
end
end
在文件不同的情况下运行它时,我得到输出:
Files are different, let's update them.
它以FileUtils.cp_r
运行,没有任何错误,但是并不能说明文件已成功复制,还是运行系统命令。我使用了相同的语法来评估FileUtils.identical?
,但不适用于FileUtils.cp_r
。
我在哪里错了?
答案 0 :(得分:5)
FileUtils::cp_r
返回nil
(在Ruby中是虚假的),否则返回错误。它永远不会返回真实值,因此使其成为条件是没有意义的。
由于它现在没有else
语句,因此只需删除其前面的if
。如果您想为cp_r
处理错误,则需要将其包装到begin..rescue
块中。
答案 1 :(得分:0)
也许是因为if FileUtils.cp_r '/var/tmp/newfile', '/var/tmp/originalfile'
没有else
子句,所以如果它返回false
或抛出并抛出异常,则不会输入if。