我正在编写一个快速的 Rails 应用程序,并且想知道如何验证 exec'd 命令是否成功。我正在运行的两个命令是和 SVN 更新,以及从一个目录到另一个目录的 cp。
rkalajian
问问题
1082 次
4 回答
8
如果您使用Kernel.system()方法,它将返回一个布尔值,指示命令成功。
result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error
这里对不同的 ruby 系统命令进行了很好的比较。
于 2008-10-05T02:32:54.133 回答
2
你是如何执行外部命令的?Rubysystem()
函数返回true
或false
取决于命令是否成功。此外,$?
还包含错误状态。
于 2008-10-05T02:31:12.640 回答
1
- 只是为了迂腐,您不能验证
exec
'd 命令,因为用 'd 命令exec
替换当前程序exec
,因此该命令永远不会返回到 Ruby 进行验证。 - 至少对于 cp,您可能会更好地使用 FileUtils 模块(Ruby 标准库的一部分),而不是直接使用 shell。
- 如上所述,预定义变量将为您提供要由反引号运算符
$?
执行的最后一个命令的返回码。system()
于 2008-10-05T04:02:30.833 回答
-4
对于 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
于 2008-10-05T02:16:33.513 回答