我正试图在一个包含在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甚至期望说实话。
答案 0 :(得分:2)
如果exit
除0
之外的其他任何内容,则为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)