class Rex::Ui::Text::IrbShell

This class wraps the creation of an IRB shell.

Public Class Methods

new(binding) click to toggle source
# File lib/rex/ui/text/irb_shell.rb, line 14
def initialize(binding)
  @binding_ctx = binding
end

Public Instance Methods

run() click to toggle source

Runs the IRB shell until completion. The binding parameter initializes IRB to the appropriate binding context.

# File lib/rex/ui/text/irb_shell.rb, line 22
def run
  # Initialize IRB by setting up its internal configuration hash and
  # stuff.
  if (@@IrbInitialized == false)
    load('irb.rb')

    IRB.setup(nil)
    IRB.conf[:PROMPT_MODE]  = :SIMPLE

    @@IrbInitialized = true
  end

  # Create a new IRB instance
  irb = IRB::Irb.new(IRB::WorkSpace.new(@binding_ctx))

  # Set the primary irb context so that exit and other intrinsic
  # commands will work.
  IRB.conf[:MAIN_CONTEXT] = irb.context

  # Trap interrupt
  old_sigint = trap("SIGINT") do
    begin
      irb.signal_handle
    rescue RubyLex::TerminateLineInput
      irb.eval_input
    end
  end

  # Keep processing input until the cows come home...
  catch(:IRB_EXIT) do
    irb.eval_input
  end

  trap("SIGINT", old_sigint)
end