我正在尝试通过SSH系统调用服务器并回显字符串.该字符串由ruby定义,并在其中有美元符号.
#!/usr/bin/env ruby
string = '$$%%$#@%$#@%325dg345345'
puts %x(ssh server "echo \'#{string}\'")
Run Code Online (Sandbox Code Playgroud)
当我执行时,返回的输出不是字符串.远程服务器将美元符号解释为变量.有什么形式的聪明逃避我可以做以防止这种情况?字符是随机的,所以只需编辑字符串以逃避美元符号将无效.
您可以使用stdlib的Shellwords库来逃避美元符号,还可以逃避空格以及您的字符串可能具有的任何其他"危险"字符:
require 'shellwords'
string = '$$%%$#@%$#@%325dg345345'
escaped_string = Shellwords.escape(string)
# "\\$\\$\\%\\%\\$\\\#@\\%\\$\\\#@\\%325dg345345"
puts %x(ssh server "echo #{string}")
Run Code Online (Sandbox Code Playgroud)