首先,我是新手,希望编写脚本......
我正在使用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
答案 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