Реализация Shellwords.shellescape для Ruby 1.8 - PullRequest
5 голосов
/ 20 августа 2009

Хотя сборка 1.8.7 у меня, похоже, имеет версию * 1001 с бэкпортом, я знаю, что метод - это функция 1.9 и определенно не поддерживается в более ранних версиях 1.8. Кто-нибудь знает, где я могу найти, в форме Gem или просто в виде фрагмента, надежную автономную реализацию команды Bourne-shell, экранирующей для Ruby?

Ответы [ 2 ]

9 голосов
/ 24 августа 2009

Вы также можете просто скопировать то, что хотите, из shellwords.rb в ствол хранилища Subversion Ruby (который GPLv2 'd):

  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
5 голосов
/ 24 августа 2009

Я закончил с самоцветом Escape , в котором есть дополнительная возможность использовать кавычки по умолчанию и только экранирование от обратной косой черты при необходимости.

...