5

1.8.7のビルドには、のバックポートバージョンがあるようですがShellwords::shellescape、メソッドは1.9の機能であり、以前のバージョンの1.8では確実にサポートされていないことを知っています。誰かが、Gem形式で、またはスニペットとして、Ruby用にエスケープするBourneシェルコマンドの堅牢なスタンドアロン実装をどこで見つけることができるか知っていますか?

4

2 に答える 2

9

Ruby の subversion リポジトリ ( GPLv2である) のトランクにあるshellwords.rbから必要なものをコピーすることもできます。

  def shellescape(str)
    # An empty argument will be skipped, so return empty quotes.
    return "''" if str.empty?

    str = str.dup

    # Process as a single byte sequence because not all shell
    # implementations are multibyte aware.
    str.gsub!(/([^A-Za-z0-9_\-.,:\/@\n])/n, "\\\\\\1")

    # A LF cannot be escaped with a backslash because a backslash + LF
    # combo is regarded as line continuation and simply ignored.
    str.gsub!(/\n/, "'\n'")

    return str
  end
于 2009-08-24T00:47:53.113 に答える
5

最終的に、デフォルトで引用符を使用し、必要な場合にのみバックスラッシュをエスケープするという追加機能を備えたEscape gem を使用しました。

于 2009-08-24T14:02:51.510 に答える