在输出和捕获结果时在bash脚本中运行命令

时间:2016-03-15 23:24:04

标签: linux bash shell ansible

我在bash脚本中运行了一个ansible命令ansible-playbook,但是当ansible因为任何原因而失败时,我需要脚本来检测它并处理错误(例如输出定义的消息和exit 1

我似乎还没有显示仍然显示ansible-playbook命令输出的最佳方法,但是捕获输出以查找是否有错误然后退出bash脚本?

这是基于ansible-playbook的输出检测到故障/错误的方式。完整输出可能是~100行。

[0;32m    openstack: PLAY RECAP ***********************************  
[0;32m    openstack: ok=92   changed=73      unreachable=0    failed=1

从上面可以看出,failed=1表示失败,因此如果failed=[1-9]+存在,则应退出bash脚本。

我尝试使用像tee这样的cmds,但没有太多运气。

2 个答案:

答案 0 :(得分:1)

我无法回答如何最好地捕获命令输出并在执行bash脚本时仍然显示它的问题。

但这是一个非常简单的选择。 ansbile.cfg中的Activate logging

log_path=/var/log/ansible.log

在开始Ansible运行之前,请撕碎该文件。运行Ansible。然后检查日志文件中是否存在模式。

答案 1 :(得分:0)

这是我最终做的事情(类似于@thatotherguy建议)

我的代码与此类似,但并不那么粗糙。

log=logs/$(date +"%s")
ansible-playbook ... | tee $log
# Do some clean up tasks
if grep -q failed=[^0] "$log"; then
  exit 1
  rm $log
fi