exe/opal
#!/usr/bin/env ruby
# Error codes are taken from /usr/include/sysexits.h
require 'opal/cli_options'
options = Opal::CLIOptions.new
begin
options.parse!
rescue OptionParser::InvalidOption => e
$stderr.puts "#{$0}: #{e.message} (-h will show valid options)"
exit 64
end
require 'opal/cli'
options_hash = options.options
options_hash.merge!(argv: ARGV.dup) unless options_hash[:lib_only]
cli = Opal::CLI.new options_hash
begin
cli.run
exit cli.exit_status || 0
rescue Opal::CliRunners::RunnerError => e
$stderr.puts e.message
exit 72
rescue SignalException => e
raise unless e.message == 'SIGUSR2'
exec($0, *ARGV)
end