验证终端命令的最佳方法是什么在Rails中成功运行?

时间:2008-10-05 01:51:07

标签: ruby-on-rails ruby validation terminal system

我正在编写一个快速的Rails应用程序,并想知道如何验证exec'd命令的成功。我正在运行的两个命令是SVN更新,以及从一个目录到另一个目录的cp。

4 个答案:

答案 0 :(得分:8)

如果使用Kernel.system()方法,它将返回一个布尔值,表示命令成功。

result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error

对不同的ruby系统命令here进行了很好的比较。

答案 1 :(得分:2)

您如何执行外部命令? Ruby system()函数返回truefalse,具体取决于命令是否成功。此外,$?包含错误状态。

答案 2 :(得分:1)

  1. 只是为了迂腐,你无法验证exec'd命令,因为execexec'd命令替换当前程序,所以命令永远不会返回Ruby用于验证。
  2. 对于cp,至少,您可能更适合使用FileUtils模块(Ruby标准库的一部分),而不是放到shell中。
  3. 如上所述,$?预定义变量将为您提供由system()或反引号运算符执行的最后一个命令的返回码。

答案 3 :(得分:-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