我正在构建一个bash脚本,以根据最后一个命令发送电子邮件。我似乎遇到了困难。在脚本之外,命令工作正常,但是当把它放在脚本中时,它没有给出期望的结果。
以下是剧本片段:
grep -vFxf /path/to/first/file /path/to/second/file > /path/to/output/file.txt
if [ -s file.txt ] || echo "file is empty";
then
swaks -t "1@email.com" -f "norply@email.com" --header "Subject: sample" --body "Empty"
else
swaks -t "1@email.com" -f "norply@email.com" --header "subject: sample" --body "Not Empty"
fi
我在脚本之外运行命令,我可以看到有数据但是当我在脚本中添加命令时,我得到空输出。请指教 。提前谢谢。
答案 0 :(得分:3)
您的情况将始终为真,因为如果[ -s file.txt ]
失败,则||
- 列表的退出状态为echo
的退出状态,几乎保证为0。您希望将echo
移出条件并进入if
语句的正文。 (为了进一步简化,只需将正文设置为变量,并在swaks
完成后调用if
。
if [ -s file.txt ];
then
body="Not Empty"
else
echo "file is empty"
body="Empty"
fi
swaks -t "1@email.com" -f "norply@email.com" --header "subject: sample" --body "$body"
如果您创建file.txt
的唯一原因是检查它是否为空,您可以直接将grep
命令置于if
条件中:
if grep -vFxfq /atph/to/first/file /path/to/second/file; then
body="Not Empty"
else
echo "No output"
body="Empty"
fi
swaks -t "1@email.com" -f "norply@email.com" --header "subject: sample" --body "$body"