我有一个makefile,如下所示。它检查gzip文件是否为空,如果不是,则必须调用test_recipe否则打印出一条消息。但是在以下情况下,无论如何都会调用test_recipe。不知道我做错了什么,或者需要做什么来检查gzip内容。
SHELL := /bin/bash
current_month = $(shell date +"%m")
current_year = $(shell date +"%Y")
current_date = $(shell date +"%Y-%m-%d")
check_file_dump_empty :
@ [ -s test_data.txt.gz ] && $(MAKE) test_recipe || echo "file is empty"
test_recipe :
@bash sqoop.sh ${current_date} ${current_year}
先谢谢了。
答案 0 :(得分:1)
存在gz
文件但为空的文件大小将不会为零字节。您的支票错了。您需要解压缩它,然后检查是否有任何输出。
这是一个重构,它也避免了无缘无故地覆盖SHELL
变量。
current_month = $(shell date +"%m")
current_year = $(shell date +"%Y")
current_date = ${current_year}-${current_month}
check_file_dump_empty:
gzip -dc test_data.txt.gz | grep -q '^' \
&& $(MAKE) test_recipe \
|| echo "file is empty"
test_recipe:
bash sqoop.sh "${current_date}" "${current_year}"
通常最好选择使脚本文件可执行并确保其在第一行具有正确的shebang,而不是显式调用bash
。