Frage

Ich schreibe eine schnelle Rails-Anwendung und frage mich, wie ich den Erfolg eines exec'd Befehl bestätigen kann. Die beiden Befehle, die ich renne und SVN-Update und ein cp von einem Verzeichnis in ein anderes.

War es hilfreich?

Lösung

Wenn Sie die Kernel.system () Verfahren es wird eine boolean zurückgeben, den Erfolg des Befehls angibt.

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

Es ist ein guter Vergleich verschiedenen Rubin Systembefehle

Andere Tipps

Wie ausführen Sie die externen Befehle? Die Funktion Rubin system() gibt true oder false je nachdem, ob der Befehl erfolgreich war. Zusätzlich $? enthält einen Fehlerstatus.

  1. Just pedantisch zu sein, können Sie keinen exec'd Befehl validieren, weil exec das aktuelle Programm mit dem exec'd Befehl ersetzt, so würde der Befehl nie für die Validierung nach Ruby zurück.
  2. Für die cp, zumindest, würden Sie wahrscheinlich besser, das FileUtils Modul verwenden (Teil des Ruby-Standard Library), anstatt auf die Schale fallen.
  3. Wie oben erwähnt, ist das $? vordefinierte Variablen, die Ihnen den Return-Code des letzten Kommandos gibt durch system() oder den Backtick-Operator ausgeführt werden.

Für SVN-Update, überprüfen Sie die Versionsnummer vor und nach dem Update.

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

Für die cp, könnten Sie eine Dateigröße Überprüfung der Original-Datei tun, die gleich die kopierten Datei.

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
scroll top