module Mail::ShellEscape

Public Class Methods

escape_for_shell(str) click to toggle source

Escapes a string so that it can be safely used in a Bourne shell command line.

Note that a resulted string should be used unquoted and is not intended for use in double quotes nor in single quotes.

open("| grep #{Shellwords.escape(pattern)} file") { |pipe|
  # ...
}

+String#shellescape+ is a shorthand for this function.

open("| grep #{pattern.shellescape} file") { |pipe|
  # ...
}
# File lib/mail/core_extensions/shell_escape.rb, line 24
def escape_for_shell(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_\s\+\-.,:\/@])/, "\\\\\\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

Private Instance Methods

escape_for_shell(str) click to toggle source

Escapes a string so that it can be safely used in a Bourne shell command line.

Note that a resulted string should be used unquoted and is not intended for use in double quotes nor in single quotes.

open("| grep #{Shellwords.escape(pattern)} file") { |pipe|
  # ...
}

+String#shellescape+ is a shorthand for this function.

open("| grep #{pattern.shellescape} file") { |pipe|
  # ...
}
# File lib/mail/core_extensions/shell_escape.rb, line 24
def escape_for_shell(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_\s\+\-.,:\/@])/, "\\\\\\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