我正在尝试通过SSH系统调用服务器并回显字符串。该字符串由ruby定义,并带有美元符号。
#!/usr/bin/env ruby
string = '$$%%$#@%$#@%325dg345345'
puts %x(ssh server "echo \'#{string}\'")
执行时,返回的输出不是字符串。远程服务器将美元符号解释为变量。有没有任何形式的聪明逃避我可以做以防止这种情况?字符是随机的,所以只需编辑字符串以逃避美元符号就不起作用。
答案 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