# File lib/rake.rb, line 988
 988:   def sh(*cmd, &block)
 989:     options = (Hash === cmd.last) ? cmd.pop : {}
 990:     unless block_given?
 991:       show_command = cmd.join(" ")
 992:       show_command = show_command[0,42] + "..." unless $trace
 993:       # TODO code application logic heref show_command.length > 45
 994:       block = lambda { |ok, status|
 995:         ok or fail "Command failed with status (#{status.exitstatus}): [#{show_command}]"
 996:       }
 997:     end
 998:     if RakeFileUtils.verbose_flag == :default
 999:       options[:verbose] = true
1000:     else
1001:       options[:verbose] ||= RakeFileUtils.verbose_flag
1002:     end
1003:     options[:noop]    ||= RakeFileUtils.nowrite_flag
1004:     rake_check_options options, :noop, :verbose
1005:     rake_output_message cmd.join(" ") if options[:verbose]
1006:     unless options[:noop]
1007:       res = rake_system(*cmd)
1008:       status = $?
1009:       status = PseudoStatus.new(1) if !res && status.nil?
1010:       block.call(res, status)
1011:     end
1012:   end