我想将输出重定向到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 。怎么做到呢?
答案 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)
可以通过STDERR
或print
将输出发送到puts
。在这里,我选择发送到STDERR
而不是$stderr
,但这对以下任何一种都有效:
STDERR.puts 'my message here'
如果您想更改Ruby脚本的退出状态(例如,以显示脚本未成功完成),则可以将exit
与参数false
一起使用:>
exit(false)
要将输出都发送到STDERR 并返回失败的退出状态,可以使用abort
:
abort 'my message here'
有关更多信息,请参考honeybadger.io的this article。