Domanda

Sto scrivendo un'app Rails veloce e mi chiedevo come posso confermare il successo di un comando exec'd. I due comandi che sto eseguendo sono e l'aggiornamento SVN e un cp da una directory all'altra.

È stato utile?

Soluzione

Se si utilizza il metodo Kernel.system () restituirà un valore booleano che indica il successo del comando.

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

Esiste un buon confronto tra diversi comandi del sistema ruby ?? qui .

Altri suggerimenti

Come stai eseguendo i comandi esterni? La funzione system () di Ruby restituisce true o false a seconda che il comando abbia avuto esito positivo. Inoltre, $? contiene uno stato di errore.

  1. Solo per essere pedanti, non è possibile convalidare un comando exec 'd perché exec sostituisce il programma corrente con exec ' d comando, quindi il comando non tornerà mai su Ruby per la convalida.
  2. Almeno per il cp, probabilmente sarebbe meglio usare il modulo FileUtils (parte della Ruby Standard Library), piuttosto che passare alla shell.
  3. Come notato sopra, la variabile predefinita $? ti fornirà il codice di ritorno dell'ultimo comando eseguito da system () o dall'operatore backtick.

Per l'aggiornamento SVN, controllare il numero di versione prima e dopo l'aggiornamento.

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

Per il cp, potresti fare un controllo della dimensione del file sul file originale uguale al file copiato.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top