2

我正在尝试对服务器进行 SSH 系统调用并回显一个字符串。该字符串由 ruby​​ 定义,其中包含美元符号。

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

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

当我执行时,返回的输出不是字符串。远程服务器将美元符号解释为变量。我可以采取任何形式的巧妙逃避来防止这种情况发生吗?字符是随机的,因此仅编辑字符串以转义美元符号是行不通的。

4

2 回答 2

8

您可以使用 stdlib 的Shellwords库来转义美元符号、空格和字符串可能包含的任何其他“危险”字符:

require 'shellwords'

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

puts %x(ssh server "echo #{string}")
于 2012-10-05T01:14:21.187 回答
2

我不确定您是否反对转义$s,因为无论字符串是否随机,这都是完全可行的:

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

输出:

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

于 2012-10-05T01:03:45.910 回答