2008-10-05 16 views

Respuesta

8

Si usa el método Kernel.system(), devolverá un booleano que indica el éxito del comando.

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

Hay una buena comparación de diferentes sistemas de rubí comandos here.

-4

Para la actualización de SVN, verifique el número de versión antes y después de la actualización.

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 

para el CP, se podría hacer una verificación de tamaño de archivo en el archivo original que es igual al archivo copiado.

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

¿Qué pasa si el repositorio de subversión no se modificó? Tu código indicará falla. ¿Qué ocurre si el contenido del archivo ha cambiado pero no el número de bloques asignados (y la operación de copia ha fallado)? Tu código indicaría éxito. –

2

¿Cómo está ejecutando los comandos externos? La función Ruby system() devuelve true o false dependiendo de si el comando se realizó correctamente. Además, $? contiene un estado de error.

1
  1. sólo para ser pedante, no se puede validar un 'comando d exec porque reemplaza el programa actual con el exec' exec comando d, por lo que el mando nunca volvería a Ruby para su validación.
  2. Para cp, al menos, probablemente sería mejor utilizar el módulo FileUtils (parte de Ruby Standard Library), en lugar de colocarlo en el shell.
  3. Como se indicó anteriormente, la variable predefinida $? le proporcionará el código de retorno del último comando ejecutado por system() o el operador de retroceso.
+0

Sí, el ejecutivo realmente me tiró cuando comencé la programación de ruby. Básicamente, ¡no lo uses! –

Cuestiones relacionadas