0

まず第一に、私はスクリプトを期待するのは初めてです...

RHEL 5.6 Linux を使用しています。

期待スクリプトがその件名と本文を含む電子メールを送信するために、bash スクリプトから expect スクリプトを呼び出し、2 つの引数、件名と本文変数 (ファイルから読み取り、そこに格納) を渡したいと考えています。

use_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"

これにより、expect スクリプトを呼び出す前にシェルによって値が分割されないようになります。

これで、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 に答える