我正在尝试对服务器进行 SSH 系统调用并回显一个字符串。该字符串由 ruby 定义并带有美元符号。
#!/usr/bin/env ruby
string = '$$%%$#@%$#@%325dg345345'
puts %x(ssh server "echo \'#{string}\'")
当我执行时,返回的输出不是字符串。远程服务器将美元符号解释为变量。我可以采取任何形式的巧妙转义来防止这种情况发生吗?字符是随机的,因此仅编辑字符串以转义美元符号是行不通的。
最佳答案
您可以使用标准库的 Shellwords库不仅可以转义美元符号,还可以转义空格和您的字符串可能包含的任何其他“危险”字符:
require 'shellwords'
string = '$$%%$#@%$#@%325dg345345'
escaped_string = Shellwords.escape(string)
# "\\$\\$\\%\\%\\$\\\#@\\%\\$\\\#@\\%325dg345345"
puts %x(ssh server "echo #{string}")
关于ruby - 通过 Ruby 系统调用通过 SSH 发送美元符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12738025/