211 votos

Ruby, la Diferencia entre exec, system y %x() o comillas simples inclinadas

Todo el mundo sabe, la diferencia de los siguientes métodos en ruby.

exec, system y %x() o comillas simples inclinadas

Yo sé, son útiles para ejecutar el comando de terminal a través de la programación manera.. Pero, yo quiero saber, por qué se introdujo tres métodos diferentes para ejecutar el mismo proceso.

212voto

platzhirsch Puntos 10662

sistema de

La system método llama a un programa de sistema. Usted tiene que proporcionar el comando como un argumento de cadena para este método. Por ejemplo:

>> system("date")
Wed Sep 4 22:03:44 CEST 2013
=> true

El programa invocado utilizará la actual STDIN, STDOUT y STDERR objetos de Ruby programa. De hecho, el valor de retorno es true, false o nil. En el ejemplo de la fecha en que fue impreso a través de la IO objeto de STDIN. El método devolverá true si el proceso terminó con un cero de estado, false si el proceso terminado con un estado distinto de cero y nil si el error en la ejecución.

Otro efecto secundario es que la variable global $? se establece en un Process::Status objeto. Este objeto contiene información acerca de la llamada en sí, incluyendo el identificador de proceso (PID) de la invoca proceso y el estado de salida.

>> system("date")
Wed Sep 4 22:11:02 CEST 2013
=> true
>> $?
=> #<Process::Status: pid 15470 exit 0>

Comillas simples inclinadas

Comillas simples inclinadas (`) llamar a un programa de sistema y volver a su salida. Al contrario que el primer enfoque, el comando no es proporcionado a través de una cadena, pero poniendo dentro de un par de comillas simples inclinadas.

>> `date`
=> Wed Sep 4 22:22:51 CEST 2013   

La variable global $? se establece a través de las comillas simples inclinadas, demasiado. Con comillas simples inclinadas usted también puede hacer uso de interpolación.

%x()

Utilizando %x es una alternativa a las comillas simples inclinadas estilo. Se devolverá a la salida, demasiado. Al igual que sus parientes %w y %q (entre otros), cualquier delimitador será suficiente siempre y como soporte de estilo delimitadores de partido. Esto significa %x(date), %x{date} y %x-date- son todos sinónimos. Como comillas simples inclinadas %x puede hacer uso de la interpolación de cadenas.

exec

Mediante el uso de Kernel#exec el proceso actual (su script en Ruby) es reemplazado con el proceso invoca a través de exec. El método puede tomar un string como argumento. En este caso, la cadena estará sujeto a la expansión de la shell. Cuando se utiliza más de un argumento, entonces el primero se utiliza para ejecutar un programa y los siguientes son proporcionados como argumentos para invocar el programa.

71voto

William Pursell Puntos 56211

Que hagan cosas diferentes. exec reemplaza el actual proceso con el nuevo proceso. sistema invoca a otro proceso y devuelve su valor de salida para el proceso actual. comillas simples inclinadas invoca a otro proceso y se devuelve el resultado de ese proceso para el proceso actual.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: