Системный вызов в Ruby - PullRequest
       29

Системный вызов в Ruby

6 голосов
/ 09 апреля 2010

Я новичок в ruby, а также в программировании, и мне нужна помощь с системным вызовом для перемещения файла из источника в место назначения:

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

Возможно ли это сделать в Ruby? Если да, то каков правильный синтаксис?

Ответы [ 4 ]

11 голосов
/ 09 апреля 2010

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

можно заменить на

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

, что уменьшает шансы атаки с использованием командной строки.

9 голосов
/ 09 апреля 2010

Два пути

Рекомендуемый способ

Вы можете использовать функции из библиотеки File Utils, см. здесь для перемещения файлов, например,

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


Непослушный путь

Использовать подход с обратными галочками (запустить любую строку как команду)

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

Хорошо, это всего лишь разновидность вызова system command, но выглядит намного капризнее!

3 голосов
/ 09 апреля 2010
system("mv #{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file})

должен быть правильный звонок

1 голос
/ 09 апреля 2010

Я рекомендую вам использовать Побег из библиотеки Танака Акиры Вот пример из одного моего приложения:

cmd = Escape.shell_command(['python', Rails::Configuration.new.root_path + '/script/grab.py']).to_s
system cmd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...