0

首先,我是新手,期待脚本......

我正在使用 RHEL 5.6 Linux。

我想从 bash 脚本中调用一个期望脚本并将其传递两个参数,一个主题和一个正文变量(从文件中读取并存储在其中),以便期望脚本发送带有该主题和正文的电子邮件。

使用_expect.sh:

#!/bin/bash  
body=`cat body.txt`
subj="whatever bla bla"
./mail.exp $subj $body

邮件.exp:

#!/usr/bin/expect -f
set subj [lindex $argv 0];
set body [lindex $argv 3]; # here we see also: instead of 1 I have to use 3 to skip all the subj words
spawn telnet localhost 25
.
.
.
send "mail from:...\n"
send "rcpt to:...\n"
send "data\n"
send "Subject: $subj\n"    # only the first word is being sent!!!
send "$body\n"             # also only the first word is being sent!!!
...
send "quit\n"
interact
4

1 回答 1

1

在 bash 脚本中,您必须引用变量:

./mail.exp "$subj" "$body"

这将确保在调用期望脚本之前,shell 不会拆分这些值。

现在,set body [lindex $argv 1]将按预期工作。

对于您的send语句,使用\r而不是\n--\r是一个回车,它模拟用户按 Enter 键。

bash 手册中的更多详细信息:http ://www.gnu.org/software/bash/manual/bashref.html#Word-Splitting

请注意,除非您这样做是为了学习期望,否则这并不是真正适合自动化电子邮件的工具。我会从

{
    echo "From: me@domain.invalid"
    echo "To: you@example.com"
    echo "Subject: $subject"
    echo
    echo "$body"
} | /usr/sbin/sendmail -oi -t
于 2013-05-17T16:44:11.290 回答