0

因此,我正在构建一个脚本,以根据 SQL DB 的输出检查一堆文件中存在某些错误的文件。有错误的文件将通过邮件发送给我。

问题是当我尝试发送邮件时,如果我在创建 PATH 变量之前发送邮件,我会收到消息“script.sh: 9: mutt: not found”。

该脚本如下所示:

JOB=$(sudo cat /tmp/sqltest.txt | awk '{ print $5 }')
DATE=$(sudo cat /tmp/sqltest.txt | awk '{ print $1 }')
CODE=$(sudo cat /tmp/sqltest.txt | awk '{ print $3 }')
PATH=$(grep ${CODE} /tmp/unzip/* | awk '{ print $1 }' | cut -d':' -f1 | head -n 1)
echo "File containing error message for job "${JOB}" at "${DATE}"" | mutt -a "/tmp/sqltest.txt" -s "Mail title" -- <mail@address>

简而言之,grep 找到错误代码所在的文件,awk 选择带有文件路径的列,该列还带有一个时间戳,该时间戳将删除并且 head 确保我只得到一个结果,如果报告错误几个地方。

如果我在变量 CODE 而不是 PATH 之后使用 mutt,我可以使用 mutt 发送邮件,但不幸的是我需要 PATH 而不是 /tmp/sqltest.txt

您对可能导致这种情况的原因有任何想法吗?

4

2 回答 2

2

我们在这里得到的是一个尝试使用环境变量的经典案例(也是一个非常重要的变量!):只需使用另一个变量名来消除错误。正如一些人所建议的,最好避免使用全大写变量。

环境变量 Bash 中有几个环境变量,PATH就是其中之一。set您可以使用该命令获取环境变量和 shell 变量的列表

来源维基百科上的环境变量

于 2013-05-08T10:29:58.247 回答
1

您可以简单地将通过命令替换获得的输出添加到PATH.

将设置 PATH 的行更改为

PATH=$(grep ${CODE} /tmp/unzip/* | awk '{ print $1 }' | cut -d':' -f1 | head -n 1):${PATH}

PATH 中的更改将在脚本的持续时间内有效。

于 2013-05-08T11:29:42.060 回答