【发布时间】:2010-09-15 08:10:57
【问题描述】:
我正在编写一个快速的 Rails 应用程序,并且想知道如何验证执行的命令是否成功。我正在运行的两个命令是和 SVN 更新,以及从一个目录到另一个目录的 cp。
【问题讨论】:
标签: ruby-on-rails ruby validation terminal system
我正在编写一个快速的 Rails 应用程序,并且想知道如何验证执行的命令是否成功。我正在运行的两个命令是和 SVN 更新,以及从一个目录到另一个目录的 cp。
【问题讨论】:
标签: ruby-on-rails ruby validation terminal system
对于SVN更新,请检查更新前后的版本号。
svn_start_version = IO.popen("svn info").readlines[4]
`svn update`
svn_end_version = IO.popen("svn info").readlines[4]
if svn_end_version > svn_start_version
"success"
end
对于 cp,您可以对原始文件与复制文件进行文件大小检查。
source_file_size = IO.popen("du file1").readlines
`cp file1 file2`
dest_file_size = IO.popen("du file2").readlines
if dest_file_size == source_file_size
"success"
end
【讨论】:
你是如何执行外部命令的? Ruby system() 函数根据命令是否成功返回 true 或 false。此外,$? 包含错误状态。
【讨论】:
如果您使用Kernel.system() 方法,它将返回一个布尔值,指示命令成功。
result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error
有一个很好的比较不同的ruby系统命令here。
【讨论】:
exec'd 命令,因为exec 将当前程序替换为exec'd 命令,因此该命令永远不会返回到Ruby 进行验证。李>
$? 预定义变量将为您提供由system() 或反引号运算符执行的最后一个命令的返回码。【讨论】: