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

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

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

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

6
задан Mark Rushakoff 9 April 2010 в 10:48
поделиться

4 ответа

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

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

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

, которая снижает вероятность атаки путем внедрения командной строки.

11
ответ дан 8 December 2019 в 04:51
поделиться

Два способа

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

Вы можете использовать функции из библиотеки 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}"`

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

9
ответ дан 8 December 2019 в 04:51
поделиться

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

cmd = Escape.shell_command(['python', Rails::Configuration.new.root_path + '/script/grab.py']).to_s
system cmd
1
ответ дан 8 December 2019 в 04:51
поделиться
system("mv #{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file})

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

3
ответ дан 8 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: