11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Thorで終了ステータス 1 で終了する

Last updated at Posted at 2012-07-22

Thorを勉強していて気が付いたのだけど、コマンドに失敗した時にも終了ステータスが0(正常終了)になる。

$ loga lookup
loga lookup requires at least 1 argument: "loga lookup [TERM]".
$ echo $?
0

loga コマンドを例に出しているのに他意はありません。たまたまこの時気が付いただけで。

これは気持ち悪い。
勿論、abort とか exit 1 とか呼べば1で終了できるのだけど、コマンド作成ツールのThorがその辺対応してないとかあり得ないだろう、と思ってちょっと gem open したりググったりした。

どうやら、Thor のサブクラスのクラスメソッド exit_on_failure?true を返せばいいみたい。Thor 自体はいつでも false を返している。

lib/thor/base.rb
class Thor
  # ...
  module Base
  # ...
    module ClassMethods
    # ...
        def exit_on_failure?
          false
        end

なのでこれを変えてやればよい。

my-command
#!/usr/local/bin/ruby
require 'thor'
  
class MyCommand < Thor
  class << self
    def exit_on_failure?
      true
    end
  end
  
  desc 'subcommand ARG', 'My subcommand'
  def subcommand(arg)
  end
end
  
MyCommand.start
$ ./my-command subcommand
my-command subcommand requires at least 1 argument: "my-command subcommand ARG".
$ echo $?
1

ちゃんと失敗したのでこれで安心して寝られる。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?