2010-09-11 15 views

Respuesta

7

Además del hecho de que no tiene que preocuparse por asegurarse de que su plataforma objetivo tenga instaladas las herramientas específicas que está utilizando, y además del problema de hacer citas adecuadas de rarezas de shell (especialmente problemático si tanto para Windows como para Unix-Cygwin, GNUWin32, etc.), si usas FileUtils de Ruby tienes una sobrecarga de tamaño moderado de una llamada de función de Ruby, mientras que si usas utilidades externas, tienes la carga bastante considerable de disparar un proceso externo cada "llamada".

+0

, pero también debe preocuparse si Ruby está instalado en el destino. – ghostdog74

+0

Debería ser dolorosamente obvio, dado que la persona que hace la pregunta está hablando de los módulos de Ruby, que el programa es, sin duda, un programa de Ruby. –

+0

no estoy diciendo que no sea un programa de Ruby. Estoy hablando de su declaración "Más allá del hecho de que no tiene que preocuparse por garantizar que su plataforma objetivo tenga instaladas las herramientas específicas que está utilizando". Obviamente, también necesitarás asegurarte de que la plataforma objetivo tenga Ruby antes de poder ejecutar su programa Ruby. – ghostdog74

2

Son más fáciles de llamar desde dentro de los scripts de Ruby porque aceptan objetos de Ruby como argumentos. Esto significa que no tiene que manejar el escape y lo que no cada vez que los llame.

+1

Usted no tiene que preocuparse de escapar al hacer 'sistema (" cp ", file1, file2)' cualquiera (aunque lo haga cuando lo haga 'system (" cp # {file} # {file2} ")'). – sepp2k

+0

¿Qué quieres decir con escapar? ¿Qué ha escapado con el sistema ("cp archivo_fuente archivo_destino") –

+0

@ajsie: debe usar espacios y caracteres especiales del shell cuando usa la versión de un argumento de 'system'. P.ej. 'system (" archivo de destino del archivo de origen cp ")' no funcionará, porque los espacios no se escapan. Sin embargo 'system (" cp "," source file "," destination file ")' funcionará bien. – sepp2k

6

Los métodos de FileUtils funcionan en Windows.

+0

también puede usar herramientas de shell. (es decir, cygwin, GNU win32) – ghostdog74

+1

@ ghostdog74: solo si los instala primero. El punto es: si usas FileUtils, tu script se ejecutará en todos los sistemas con ruby. Si usa cp su script se ejecutará en todos los sistemas con ruby ​​y cp. No hay ninguna razón para agregar una dependencia adicional para algo tan simple como copiar archivos. – sepp2k

+0

primero tiene que instalar Ruby también. – ghostdog74

1

Cuando cultivas las cosas en el shell, estás agregando una dependencia a esas aplicaciones. FileUtils es rubí puro, por lo que funciona (y funciona igual, más o menos) en cualquier lugar que funcione Ruby.

-2

No diría que no hay beneficios en el uso de FileUtils de Ruby, ya que puede usarlos en cualquier lugar donde tenga Ruby (especialmente si su tarea está en desarrollo web). Pero eso no significa que no puedas usar esas herramientas de shell en otras plataformas también. Sí, puedes escribir tus scripts en * nix shell, y puedes ejecutarlos también con poca o ninguna modificación en, digamos, Windows usando cygwin o GNU win32. (Y otros). En cuanto a los beneficios de FileUtils de Ruby contra shell's, es mínimo, ya que lo que puedes hacer con FileUtils también lo puedes hacer con Shell.

1
  • funciona en múltiples plataformas
  • no desovar un nuevo proceso para emitir el comando (por lo que consume menos recursos)
+0

tiene que ejecutar el intérprete de ruby ​​para ejecutar el script de ruby. Esto está generando un proceso. ¿no es así? – ghostdog74

+0

Ah, creo que he malinterpretado la pregunta. Pensé que estaba preguntando sobre usar el comando de shell de Ruby. –

Cuestiones relacionadas