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

awo*_*ojo 2 ruby ssh

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

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

puts %x(ssh server "echo \'#{string}\'")
Run Code Online (Sandbox Code Playgroud)

当我执行时,返回的输出不是字符串.远程服务器将美元符号解释为变量.有什么形式的聪明逃避我可以做以防止这种情况?字符是随机的,所以只需编辑字符串以逃避美元符号将无效.

Ren*_*non 7

您可以使用stdlib的Shellwords库来逃避美元符号,还可以逃避空格以及您的字符串可能具有的任何其他"危险"字符:

require 'shellwords'

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

puts %x(ssh server "echo #{string}")
Run Code Online (Sandbox Code Playgroud)

  • 我认为必须有像shell编码的URL编码,但不要指望它在stdlib中.+1 (2认同)