2010-04-09 24 views
6

yo soy un principiante en rubí y en la programación, así y necesitan ayuda con llamada al sistema para mover un archivo desde el origen al destino de esta manera:La llamada al sistema en Ruby

system(mv "#{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}") 

¿Es posible hacer esto en ¿Rubí? Si es así, ¿cuál es la sintaxis correcta?

Respuesta

11

system("mv #{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file})

pueden ser sustituidos por

system("mv", "#{@SOURCE_DIR}/#{my_file}", "#{@DEST_DIR}/#{file}")

lo que reduce las posibilidades de una ataque de inyección de línea de comando.

3
system("mv #{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}) 

debería ser la llamada correcta

9

Dos maneras

forma recomendada

Puede utilizar las funciones del Archivo Utilidades libary ver here para mover sus archivos, por ejemplo,

mv(src, dest, options = {}) 


Options: force noop verbose 

Moves file(s) src to dest. If file and dest exist on the different disk 
partition, the file is copied instead. 

FileUtils.mv 'badname.rb', 'goodname.rb' 
FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', :force => true # no error 

FileUtils.mv %w(junk.txt dust.txt), '/home/aamine/.trash/' 
FileUtils.mv Dir.glob('test*.rb'), 'test', :noop => true, :verbose => true 


manera traviesa

utilizar el enfoque invertidas (ejecutar cualquier cadena como un comando)

result = `mv "#{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}"` 

Ok, eso es sólo una variación de la llamada al sistema de comando pero se ve mucho más travieso!

+0

Ok, gracias por todas las respuestas. Si muevo y cambio el nombre del archivo a través del sistema de archivos NFS, ¿qué sucede realmente después de File.rename? ¿File.rename extrae el archivo a mi sistema de archivos local y lo renombra y lo empuja (lo mueve) de regreso a destino o lo renombra en el destino? – Niklas

+0

El servidor remoto NFS es responsable de manejar el cambio de nombre. En lo que respecta a todos los programas locales, el archivo es local, pero el trabajo del controlador NFS es hacer que parezca local. Los archivos nunca se copian localmente para cambiar el nombre o mover operaciones. –

1

recomiendo que uses Tanaka akira's escape library Aquí es un ejemplo de un mi aplicación:

cmd = Escape.shell_command(['python', Rails::Configuration.new.root_path + '/script/grab.py']).to_s 
system cmd 
Cuestiones relacionadas