6

私は簡単なRailsアプリを書いていますが、実行されたコマンドの成功をどのように検証できるか疑問に思っていました. 私が実行している 2 つのコマンドは、SVN の更新と、あるディレクトリから別のディレクトリへの cp です。

4

4 に答える 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
  1. 念のために言うと、現在のプログラムを 'd コマンドに置き換えるexecため、'd コマンドを検証することはできません。そのため、コマンドは検証のために Ruby に返されることはありません。execexec
  2. 少なくとも cp については、シェルにドロップするよりも、FileUtils モジュール (Ruby 標準ライブラリの一部) を使用する方がよいでしょう。
  3. 上記のように、事前定義された変数は、またはバッククォート演算子$?によって実行される最後のコマンドのリターン コードを提供します。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 に答える