将输出重定向到stderr

时间:2016-12-29 06:37:07

标签: ruby-on-rails ruby redirect stderr

我想将输出重定向到stderr。我有个cron工作

function auth_tester {
  cd /data/$1/current && bundle exec rake 'authentication:tester' 1>    /dev/null
}

调用rake任务

namespace :authentication do

  desc "Automatically runs authentication tester and notifies in case of failure"
  task :tester => :environment do
    auth_tester_results = AuthenticationTester.perform

    exit(auth_tester_results.success? ? 0 : 1)
  end
end

如果'auth_tester_results'布尔值为false,我希望将输出重定向到stderr 。怎么做到呢?

2 个答案:

答案 0 :(得分:3)

由于您已经在处理shell,请在shell中执行:

function auth_tester {
  cd /data/$1/current && \
  bundle exec rake 'authentication:tester' >/dev/null 2>&1
  #                                 HERE:  ⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑
}

stderr有一个id = 2,我们将stdout重定向到/dev/null,将stderr重定向到stdout,最终将其重定向到{ {1}}。

要将/dev/null重定向到stdout,请使用相反的内容:

stderr

要重定向ruby的输出,请使用IO#puts的正确接收器:

1>&2

答案 1 :(得分:0)

可以通过STDERRprint将输出发送到puts。在这里,我选择发送到STDERR而不是$stderr,但这对以下任何一种都有效:

STDERR.puts 'my message here'

如果您想更改Ruby脚本的退出状态(例如,以显示脚本未成功完成),则可以将exit与参数false一起使用:

exit(false)

要将输出都发送到STDERR 并返回失败的退出状态,可以使用abort

abort 'my message here'



有关更多信息,请参考honeybadger.io的this article