通过Ruby系统调用通过SSH发送美元符号

时间:2012-10-05 00:44:09

标签: ruby ssh

我正在尝试通过SSH系统调用服务器并回显字符串。该字符串由ruby定义,并带有美元符号。

#!/usr/bin/env ruby
string = '$$%%$#@%$#@%325dg345345'

puts %x(ssh server "echo \'#{string}\'")

执行时,返回的输出不是字符串。远程服务器将美元符号解释为变量。有没有任何形式的聪明逃避我可以做以防止这种情况?字符是随机的,所以只需编辑字符串以逃避美元符号就不起作用。

2 个答案:

答案 0 :(得分:7)

你可以使用stdlib的Shellwords库不仅可以逃避美元符号,还可以逃避空格以及字符串可能包含的任何其他“危险”字符:

require 'shellwords'

string = '$$%%$#@%$#@%325dg345345'
escaped_string = Shellwords.escape(string)
# "\\$\\$\\%\\%\\$\\\#@\\%\\$\\\#@\\%325dg345345"

puts %x(ssh server "echo #{string}")

答案 1 :(得分:2)

我不确定你是否反对逃避$ s,因为字符串是否随机是完全可行的:

escaped_string = string.gsub('$', '\$')
puts %x(ssh server "echo \'#{escaped_string}\'")

输出:

  

$$ %% $#@%$#@%325dg345345