2008-10-05 39 views

回答

8

如果使用Kernel.system()方法會返回一個布爾值,指示命令的成功。

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

有不同紅寶石系統的很好的比較命令here

-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 
+0

如果什麼顛覆庫沒有改變?你的代碼會顯示失敗。如果文件內容發生變化但分配的塊數量不足(複製操作失敗)怎麼辦?您的代碼會顯示成功。 – 2008-10-05 02:24:49

2

你是如何執行外部命令的?紅寶石system()功能取決於命令是否成功truefalse返回。此外,$?包含錯誤狀態。

1
  1. 只要是迂腐,d命令「因爲execexec替換當前的程序d命令」你不能驗證一個exec,因此命令將不會返回到Ruby進行驗證。
  2. 對於CP,至少,你很可能會使用文件實用程序模塊(Ruby的標準庫的一部分),而不是下降到外殼的更好。
  3. 如上所述,所述$?預定義的變量給你的最後一個命令的返回代碼由system()或反引號運算符來執行。
+0

是的,當我第一次開始使用ruby編程時,執行官真的把我扔了。基本上,不要使用它! – 2008-10-05 20:09:05

相關問題