2016-02-29 62 views
0
mysqldump = "mysqldump" 
`#{mysqldump} > backup_file.sql` 

我应该追加几个这些mysqldump字符串(我简化了这个例子,通常第2行将用户名和密码作为选项)到SQL文件。试图创建一个Ruby脚本。我想追加包含命令的字符串到一个文件

问题是第2行,当我尝试调用Bash运算符'>'追加字符串。脚本不是追加,而是最终调用mysqldump命令本身。

我能做些什么来将字符串“mysqldump”存储到文件backup_file.sql中?我想以与第2行相同的方式执行操作:通过Bash自动追加。

+0

你是不是指'echo#{mysqldump}> backup_file.sql'? – BroiSatse

+0

@BroiSatse对你需要的'echo'是正确的。我会补充说bash中的append运算符是'>>',而不是'>';每次使用''''操作符都会覆盖'backup_file.sql'的全部内容。 –

+0

你到底想要做什么,创建一个包含多个模式内容的.sql文件?或者自己创建一个包含多个命令的文件?也许在你的例子中使用除变量名称以外的其他值作为值? – TheFiddlerWins

回答

2

,如果你正在尝试添加“喜欢”你说的,而不是覆盖目标文件使用>>代替>。这里是你的脚本的工作版本:

za$ emacs ./foo.rb 

#!/usr/bin/env ruby 

target_dir = "/Users/za/ruby-practice/backup_file.sql" 

mysqldump = "mysqldump" 
`echo #{mysqldump} >> "#{target_dir}"` 

你也可以这样做:system %Q{echo "#{mysqldump}" >> "#{target_dir}"} 。就个人而言,如果您想要一个纯ruby解决方案/系统独立解决方案,我会说使用IO#puts而不是在脚本内部进行系统调用。

+0

你说得对。这通常是我正在寻找的东西,回声是我需要的。 –

0

为什么不使用纯红宝石来做到这一点?像:

File.open("backup_file.sql", "w") do |f| 
    dump_lines.each do |line| 
    f.puts line 
    end 
end 

假设你有转储在数组..

+0

这可以工作,但我正在跟随一个例子,他们正在使用更简单的方法。 –

相关问题