2008-10-05 12 views

Antwort

8

Wenn Sie die Methode Kernel.system() verwenden, wird ein Boolescher Wert zurückgegeben, der den Erfolg des Befehls angibt.

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

Es gibt einen guten Vergleich verschiedenen Rubin System here Befehle.

-4

Überprüfen Sie für das SVN-Update die Versionsnummer vor und nach dem Update.

Für das cp, könnten Sie eine Dateigröße überprüfen, ob die Originaldatei gleich der kopierten Datei ist.

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

Was passiert, wenn das Subversion-Repository nicht geändert wurde? Ihr Code würde auf einen Fehler hinweisen. Was wäre, wenn sich der Dateiinhalt geändert hätte, aber nicht die Anzahl der zugewiesenen Blöcke (und der Kopiervorgang fehlgeschlagen ist)? Ihr Code würde auf Erfolg hinweisen. –

2

Wie werden die externen Befehle ausgeführt? Die Ruby-Funktion system() gibt true oder false zurück, je nachdem, ob der Befehl erfolgreich war. Außerdem enthält $? einen Fehlerstatus.

1
  1. Nur um pedantisch, können Sie einen exec ‚d Befehl weil exec das aktuelle Programm mit dem exec ersetzt‘ nicht bestätigen d Befehl, so würde der Befehl nie für die Validierung nach Ruby zurückzukehren.
  2. Für die cp, zumindest, würden Sie wahrscheinlich besser mit dem FileUtils-Modul (Teil der Ruby-Standard-Bibliothek), anstatt auf die Shell fallen.
  3. Wie oben erwähnt, gibt Ihnen die vordefinierte Variable $? den Rückkehrcode des letzten Befehls, der von system() oder dem Backtick-Operator ausgeführt werden soll.
+0

Ja, exec warf mich wirklich, als ich zum ersten Mal Ruby-Programmierung begann. Im Grunde, benutze es nicht! –