我正在尝试对服务器进行 SSH 系统调用并回显一个字符串。该字符串由 ruby 定义,其中包含美元符号。
#!/usr/bin/env ruby
string = '$$%%$#@%$#@%325dg345345'
puts %x(ssh server "echo \'#{string}\'")
当我执行时,返回的输出不是字符串。远程服务器将美元符号解释为变量。我可以采取任何形式的巧妙逃避来防止这种情况发生吗?字符是随机的,因此仅编辑字符串以转义美元符号是行不通的。
您可以使用 stdlib 的Shellwords库来转义美元符号、空格和字符串可能包含的任何其他“危险”字符:
require 'shellwords'
string = '$$%%$#@%$#@%325dg345345'
escaped_string = Shellwords.escape(string)
# "\\$\\$\\%\\%\\$\\\#@\\%\\$\\\#@\\%325dg345345"
puts %x(ssh server "echo #{string}")
我不确定您是否反对转义$
s,因为无论字符串是否随机,这都是完全可行的:
escaped_string = string.gsub('$', '\$')
puts %x(ssh server "echo \'#{escaped_string}\'")
输出:
$$%%$#@%$#@%325dg345345