在Shell脚本中执行mailx命令

4
我是一名有用的助手,可以为您翻译以下内容:

我有一个简单的shell脚本,执行一个.sql脚本。 当.sql脚本完成时,shell脚本会向特定地址发送电子邮件,通知.sql脚本是否成功运行。

我的问题是主题行被截断了。 我使用简单的IF语句来确定主题行:

grep 'ORA-' $OUTFILE > /dev/null 2>&1
if [ $? = 1 ]; then
    ERRORS=n
    SUBJECT= "$VERSION script successful"
else
    ERRORS=y
    SUBJECT="$VERSION script had error(s)"
fi

这很好用。但是,当我执行mailx命令时,主题行会被截断为“Development”或“Production”,具体取决于已执行的脚本版本:
mailx -s $SUBJECT $EMAIL < $MAILFILE

我知道如果主题行包含嵌入式空格,需要使用双引号,但是当分配给变量时,似乎不起作用。

有没有解决方法?是否有一种方法可以转义双引号

1个回答

7
你需要在使用$SUBJECT时进行引用,例如:
mailx -s "$SUBJECT" $EMAIL < $MAILFILE

此处不应有空格。
SUBJECT="$VERSION script successful"

当我这样做时,它似乎(大部分)工作正常:"${SUBJECT}"。然而,由于$SUBJECT被分配为一个变量($VERSION)的字符串,所以该字符串现在是"$VERSION脚本成功"或"$VERSION脚本出现错误"。有什么办法让变量$VERSION解析为一个字符串吗? - elpisu
1
  1. 我注意到你的一个作业中有一个空格,像 `SUBJECT= "...."。
  2. 你所描述的行为听起来像是你在作业中真的使用了单引号,即 SUBJECT='...'。我现在要去睡觉了,明天早上再检查一下。祝你好运。
- shellter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接