用Ruby调用系统

Nik*_*las 6 ruby system

我是ruby和编程的初学者,需要帮助系统调用将文件从源移动到目标,如下所示:

system(mv "#{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}")
Run Code Online (Sandbox Code Playgroud)

是否可以在Ruby中执行此操作?如果是这样,那么正确的语法是什么?

And*_*imm 11

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

可以替换为

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

这减少了命令行注入攻击的可能性.


Chr*_*ley 9

两种方式

推荐方式

您可以使用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
Run Code Online (Sandbox Code Playgroud)


顽皮的方式

使用反引号方法(将任何字符串作为命令运行)

result = `mv "#{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}"`
Run Code Online (Sandbox Code Playgroud)

好吧,这只是调用系统命令的变体,但看起来更加顽皮!