2010-04-09 16 views
6

io sono un principiante in rubino e nella programmazione, come bene e bisogno di aiuto con chiamata di sistema per lo spostamento di un file dalla sorgente alla destinazione come questo:chiamata di sistema in Ruby

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

E 'possibile farlo in Rubino? In tal caso, qual è la sintassi corretta?

risposta

11

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

possono essere sostituiti con

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

che riduce le possibilità di un attacco di iniezione da linea di comando.

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

dovrebbe essere la chiamata giusta

9

Due modi

modo consigliato

È possibile utilizzare le funzioni nel file Utils libary vedere here spostare i file ad esempio

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 


modo Spregiudicatezza

utilizzare l'approccio apici inversi (eseguire qualsiasi stringa come un comando)

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

Ok, questo è solo una variazione di chiamare il comando di sistemama sembra molto più cattivo!

+0

Ok, grazie per tutte le risposte. Se si sposta e si rinomina il file su file system NFS, cosa succede realmente dopo File.rename? File.rename estrae il file nel mio file system locale e lo rinomina e lo sposta (sposta) a destinazione o esegue l'operazione di rinomina sulla destinazione? – Niklas

+0

Il server NFS remoto è responsabile della gestione della ridenominazione. Per quanto riguarda tutti i programmi locali, il file è locale ma è compito del driver NFS farlo apparire come se fosse locale. I file non vengono mai copiati localmente per rinominare o spostare le operazioni. –

1

vi consiglio di utilizzare Tanaka akira's escape library Ecco ad esempio da una mia app:

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