2013-08-23 139 views
0

这是我的代码。我想抓住p的值,并在匹配1时将其插入到文件changed.txt中。但它没有做我想做的事,似乎它不知道什么是{{p}是如何将ruby变量传递给Shell中的sed命令?

Net::SSH.start("192.168.2.1", "root", :password => "password") do |ssh| 
    p = ssh.exec! "java -cp /var/lib/sonar/dev-tools.jar au.com.Tool test" 
# puts #{p} 
    ssh.exec! "sed 's/1/#{p}/g' changed.txt" 
end 
+0

你能分享它实际上做了什么吗?你的'puts'调试语句应该是'puts'#{p}“'。你在'sed'正则表达式中得到了什么?#{p}'?我运行了一个类似于此的测试用例,它工作正常。 – lurker

+0

我想用p的值替换1; changed.txt里面只包含1个。但是对于当前的代码,changed.txt仍然有1,根本没有任何变化.. – gugo

回答

2

通过p价值的方式,你应该可以正常工作。但是,sed命令不会更改该文件。如果你想让它改变的地方文件,使用-i选项,如下所示:

ssh.exec! "sed -i 's/1/#{p}/g' changed.txt" 

或者,如果你想在不同的文件中的更改,然后使用:

ssh.exec! "sed 's/1/#{p}/g' changed.txt > newfile.txt" 

另一种选择是是:

ssh.exec! "sed -i 's/1/" + p + "/g' changed.txt" 
+0

我认为'/ 1 /#{p}/g'#{p}也可以工作,但是,当它传入sed ,它没有价值,因为changed.txt仍然是一样的,没有改变。还要感谢纠正我的调试提出“#{p}”。 – gugo

+0

@gugo,你的'puts'为'p'是否给你一个非零输出?这种情况下'p'的值是多少? – lurker

+0

把“#{p}”确实输出值619A72E67F796BD2。 dev-tools.jar是一个生成加密文本的工具(在这种情况下,测试如上所述),我希望它替换changed.txt中的旧文本。 – gugo