vendor/bundle/ruby/2.5.0/gems/rake-13.0.1/lib/rake/file_utils.rb
def sh(*cmd, &block)
    options = (Hash === cmd.last) ? cmd.pop : {}
    shell_runner = block_given? ? block : create_shell_runner(cmd)

    set_verbose_option(options)
    verbose = options.delete :verbose
    noop    = options.delete(:noop) || Rake::FileUtilsExt.nowrite_flag

    Rake.rake_output_message sh_show_command cmd if verbose

    unless noop
      res = (Hash === cmd.last) ? system(*cmd) : system(*cmd, options)
      status = $?
      status = Rake::PseudoStatus.new(1) if !res && status.nil?
      shell_runner.call(res, status)
    end
  end
# Run the system command +cmd+.  If multiple arguments are given the command
# is run directly (without the shell, same semantics as Kernel::exec and
# Kernel::system).
#
# It is recommended you use the multiple argument form over interpolating
# user input for both usability and security reasons.  With the multiple
# argument form you can easily process files with spaces or other shell
# reserved characters in them.  With the multiple argument form your rake
# tasks are not vulnerable to users providing an argument like
# <code>; rm # -rf /</code>.
#
# If a block is given, upon command completion the block is called with an
# OK flag (true on a zero exit status) and a Process::Status object.
# Without a block a RuntimeError is raised when the command exits non-zero.
#
# Examples:
#
#   sh 'ls -ltr'
#
#   sh 'ls', 'file with spaces'
#
#   # check exit status after command runs
#   sh %{grep pattern file} do |ok, res|
#     if !ok
#       puts "pattern not found (status = #{res.exitstatus})"
#     end
#   end
#
Run the system command +cmd+.  If multiple arguments are given the command
is run directly (without the shell, same semantics as Kernel::exec and
Kernel::system).

It is recommended you use the multiple argument form over interpolating
user input for both usability and security reasons.  With the multiple
argument form you can easily process files with spaces or other shell
reserved characters in them.  With the multiple argument form your rake
tasks are not vulnerable to users providing an argument like
; rm # -rf /.

If a block is given, upon command completion the block is called with an
OK flag (true on a zero exit status) and a Process::Status object.
Without a block a RuntimeError is raised when the command exits non-zero.



sh 'ls -ltr'

sh 'ls', 'file with spaces'

check exit status after command runs
sh %{grep pattern file} do |ok, res|
if !ok
puts "pattern not found (status = #{res.exitstatus})"
end
end
Run the system command + cmd + . If multiple arguments are given the command is run directly ( without the shell same semantics as Kernel :: exec and Kernel :: system ) . It is recommended you use the multiple argument form over interpolating user input for both usability and security reasons . With the multiple argument form you can easily process files with spaces or other shell reserved characters in them . With the multiple argument form your rake tasks are not vulnerable to users providing an argument like ; rm # - rf / . If a block is given upon command completion the block is called with an OK flag ( true on a zero exit status ) and a Process :: Status object . Without a block a RuntimeError is raised when the command exits non - zero . sh ' ls - ltr ' sh ' ls ' ' file with spaces ' check exit status after command runs sh % { grep pattern file } do |ok res| if !ok puts " pattern not found ( status = # { res . exitstatus } ) " end end
def sh(*cmd, &block)
    options = (Hash === cmd.last) ? cmd.pop : {}
    shell_runner = block_given? ? block : create_shell_runner(cmd)
    set_verbose_option(options)
    verbose = options.delete :verbose
    noop    = options.delete(:noop) || Rake::FileUtilsExt.nowrite_flag
    Rake.rake_output_message sh_show_command cmd if verbose
    unless noop
      res = (Hash === cmd.last) ? system(*cmd) : system(*cmd, options)
      status = $?
      status = Rake::PseudoStatus.new(1) if !res && status.nil?
      shell_runner.call(res, status)
    end
  end
def sh ( * cmd , & block ) options = ( Hash === cmd . last ) ? cmd . pop : { } shell_runner = block_given? ? block : create_shell_runner ( cmd ) set_verbose_option ( options ) verbose = options . delete :verbose noop = options . delete ( :noop ) || Rake :: FileUtilsExt . nowrite_flag Rake . rake_output_message sh_show_command cmd if verbose unless noop res = ( Hash === cmd . last ) ? system ( * cmd ) : system ( * cmd , options ) status = $? status = Rake :: PseudoStatus . new ( 1 ) if ! res && status . nil? shell_runner . call ( res , status ) end end
Run the system command +cmd+.
Run the system command + cmd + .
cmd
block