ver uso sintaxis significa rails que ejemplo comandos comando ruby command exit exit-code

uso - comando de sistema de ruby verifica el código de salida



sintaxis de comandos cmd (5)

De la documentation :

el sistema devuelve true si el comando da cero estado de salida, false para el estado de salida no cero. Devuelve nil si la ejecución del comando falla.

system("unknown command") #=> nil system("echo foo") #=> true system("echo foo | grep bar") #=> false

además

¿Hay un estado de error disponible en $? .

system("VBoxManage createvm --invalid-option") $? #=> #<Process::Status: pid 9926 exit 2> $?.exitstatus #=> 2

Tengo un montón de llamadas al sistema en ruby, como las siguientes, y quiero verificar sus códigos de salida simultáneamente para que mi script salga si ese comando falla.

system("VBoxManage createvm --name test1") system("ruby test.rb")

Quiero algo como

system("VBoxManage createvm --name test1", 0) <- donde el segundo parámetro verifica el código de salida y confirma que la llamada al sistema fue exitosa, y si no, generará un error o hará algo de ese tipo.

¿Es eso posible?

Intenté algo parecido a esto y tampoco funcionó.

system("ruby test.rb") system("echo $?")

o

`ruby test.rb` exit_code = `echo $?` if exit_code != 0 raise ''Exit code is not zero'' end


No está capturando el resultado de su llamada al system , que es donde se devuelve el código de resultado:

exit_code = system("ruby test.rb")

Recuerde que cada llamada al system o equivalente, que incluye el método de retroceso, genera un nuevo intérprete de comandos, por lo que no es posible capturar el resultado del entorno de un shell anterior. En este caso, exit_code es true si todo funcionó, de lo contrario.

El comando popen3 proporciona más detalles de bajo nivel.


Para mí, preferí usar `` para llamar a los comandos de shell y marcar $? para obtener el estado del proceso ¿El $? es un objeto de estado de proceso, puede obtener la información de proceso del comando desde este objeto, incluyendo: código de estado, estado de ejecución, pid, etc.

Algunos métodos útiles de $? objeto:

$?.exitstatus => return error code $?.success? => return true if error code is 0, otherwise false $?.pid => created process pid


Una forma de hacerlo es encadenándolas con and y && :

system("VBoxManage createvm --name test1") and system("ruby test.rb")

La segunda llamada no se ejecutará si la primera falla.

Puede envolverlos en un if () para darle un poco de control de flujo:

if ( system("VBoxManage createvm --name test1") && system("ruby test.rb") ) # do something else # do something with $? end


system devuelve false si el comando tiene un código de salida distinto de cero, o nil si no hay ningún comando.

Por lo tanto

system( "foo" ) or exit

o

system( "foo" ) or raise "Something went wrong with foo"

debería funcionar, y son razonablemente concisos.