避免 bash 脚本等待用户输入 Enter 键

避免 bash 脚本等待用户输入 Enter 键

我在 bash 脚本中有以下条目:

 echo "Please see attached file" | mailx -S smtp=$smtpServer -s "Subject of the mail" -a $logfile -r "[email protected]" [email protected] [email protected]

如果发送邮件没有错误,则工作正常,但如果有错误,mailx 将显示错误消息并等待用户按 Enter 键。我怎样才能避免这种情况呢?它不应该等待用户按下回车键。

答案1

您通常会尝试使用应用程序开关进行非交互模式或为此抑制错误。mailx然而,在快速浏览文档后,我没有找到任何明确的内容。

执行此操作的更通用方法是使用命令timeout来执行此操作,该命令运行指定的命令,如果在指定的超时后该命令仍在运行,则将其终止。

例如,在您的情况下,命令将是:

echo "Mail body" | timeout 15s mailx ${MAILX_OPTIONS}

如果该命令在 15 秒后仍在运行,则该命令将被终止mailx,这应该仅在出现挥之不去的错误消息的情况下发生。

答案2

在严重黑客攻击类别的解决方案中,发送一个无偿的回车符,如果需要的话就会出现,如果不需要的话就会被丢弃:

{ echo "Please see attached file"; echo; } | mailx ...

答案3

您可以在预计shell,它将监视允许您查找提示并发送响应信息。

#!/usr/bin/expect
spawn COMMAND
expect "PROMPT"
send "RESPONSE\n";
interact

相关内容