Ruby中的系统调用

Ruby中的系统调用,ruby,system,Ruby,System,我是ruby和编程的初学者,需要系统调用方面的帮助才能将文件从源代码移动到目标,如下所示: system(mv "#{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}") 在Ruby中可以做到这一点吗?如果是,正确的语法是什么 system("mv #{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}) 应该是正确的呼叫方式两种方式 推荐方式 您可以使用文件Utils库中的函数来移动文件,例如 mv(src, d

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

system(mv "#{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{file}")
在Ruby中可以做到这一点吗?如果是,正确的语法是什么

system("mv #{@SOURCE_DIR}/#{my_file} #{@DEST_DIR}/#{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

顽皮的方式

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

好的,这只是调用系统命令的一种变体,但看起来更淘气

我建议您使用 下面是我的一个应用程序的示例:

cmd = Escape.shell_command(['python', Rails::Configuration.new.root_path + '/script/grab.py']).to_s
system cmd
system(“mv{@SOURCE\u DIR}/{my\u file}}{@DEST\u DIR}/{file})

可以替换为

system(“mv”、“{@SOURCE\u DIR}/{my\u file}”、“{@DEST\u DIR}/{file}”)


这降低了命令行注入攻击的几率。

好的,谢谢您提供的所有答案。如果我通过NFS文件系统移动并重命名文件,file.rename之后会发生什么?file.rename是否将文件拉到本地文件系统并重命名并推送(移动)它返回到目标还是在目标上执行重命名操作?远程NFS服务器负责处理重命名。就所有本地程序而言,该文件是本地的,但NFS驱动程序的任务是使其看起来像本地的。重命名或移动操作从不在本地复制文件。
cmd = Escape.shell_command(['python', Rails::Configuration.new.root_path + '/script/grab.py']).to_s
system cmd