在expect脚本中发送多字符串

时间:2013-05-17 15:19:18

标签: bash expect

首先,我是新手,希望编写脚本......

我正在使用RHEL 5.6 Linux。

我想从bash脚本调出一个expect脚本并传递两个参数, 主题和正文变量(从文件中读取并存储在其中)以便进行 希望脚本能够发送有关该主题和正文的电子邮件。

use_expect.sh:

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

mail.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

1 个答案:

答案 0 :(得分:1)

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

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

这将确保在调用expect脚本之前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