ruby at_exit статус выхода - PullRequest
       42

ruby at_exit статус выхода

12 голосов
/ 17 июля 2009

Могу ли я определить состояние выхода из процесса в блоке at_exit?

at_exit do
  if this_process_status.success?
    print 'Success'
  else
    print 'Failure'
  end
end

Ответы [ 2 ]

17 голосов
/ 18 июля 2009

Хотя документация на это действительно тонкая, $! устанавливается как последнее исключение, которое возникает, и после вызова exit () это исключение SystemExit. Соединяя эти два, вы получите:

at_exit do
  if ($!.success?)
    print 'Success'
  else
    print 'Failure'
  end
end
15 голосов
/ 20 июля 2009

используя идею от Тэдман

at_exit do
  if $!.nil? || $!.is_a?(SystemExit) && $!.success?
    print 'success'
  else
    code = $!.is_a?(SystemExit) ? $!.status : 1
    print "failure with code #{code}"
  end
end
...