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 に答える