如何使用Bash引发错误?

时间:2017-06-15 22:39:05

标签: bash airflow apache-airflow

我正试图在一个包含在Python Airflow脚本中的块中使用Bash引发错误。

export PATH=/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
export rundate=`TZ='America/Los_Angeles' date +%F -d "yesterday"`
export AWS_CONFIG_FILE="/home/ubuntu/.aws/config"
thisshouldnotrun

/home/ubuntu/bin/snowsql -f //home/ubuntu/script/dev/sql1.sql 1> /home/ubuntu/logs/"$rundate"_dev.log 2> /home/ubuntu/logs/"$rundate"_error_dev.log 

基本上,调用snowsql函数的最后一行总是返回退出状态0,即使我删除了重定向部分。所以这就是我重定向到error_dev.log文件的原因。

基本上,我想在其中添加if块,如果文件存在则手动引发错误。我尝试添加exit 64,但Airflow似乎不喜欢这样。使用exit ##最容易在Bash中引发错误?不确定Airflow甚至期望说实话。

1 个答案:

答案 0 :(得分:2)

如果exit0之外的其他任何内容,则为considered an error code in bash

There are several different exit codes that are returned when SnowSQL quits/exits

  

0 :一切顺利。

     

1 :客户端出了问题。

     

2 :命令行参数出错了。

     

3 :SnowSQL无法联系服务器。

     

4 :SnowSQL无法与服务器正常通信。

     

5 :设置了exit_on_error配置选项,并且由于错误退出了SnowSQL。

在检查文件存在的情况下,您可以使用:

[[ -f <file> ]] && <on success> || <on failure> (exit 64, or w/e)