我如何使用expect和bash脚本

时间:2016-07-21 17:06:59

标签: bash shell expect

我有一个带有大量操作的文本文件,我希望使用我的期望脚本发送它(用我的textr文件中的命令替换op1& op2,每行一个命令):

#!/usr/bin/expect
spawn ssh root@ccTest telnet jpaxdp
expect {\-> }
send "op1(20)\r"
expect {\-> }
send "op2\r"
expect {\-> }
send "exit\r"
expect eof

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我不认为我理解你的问题。在我看来,最简单的方法是让期望处理文件:

#!/usr/bin/expect
set command_file [lindex $argv 0]
spawn ssh root@ccTest telnet jpaxdp
expect {\-> }

set fh [open $command_file r]
while {[gets $fh line] != -1} {
    send "$line\r"
    expect {\-> }
}
close $fh

send "exit\r"
expect eof

然后

答案 1 :(得分:0)

您可以使用bash脚本创建一系列命令并将其发送给它。

例如,您有cmds.txt

echo hello
echo goodbye

以及名为ex.sh的bash脚本:

#!/bin/bash

echo 'spawn bash'
while read line; do
    echo 'expect {$ }'
    echo send '"'"$line\r"'"'
done
echo 'expect {$ }'
echo 'send "exit\r"'
echo 'expect eof'

所以现在你所要做的就是使用这样的管道:

cat cmds.txt | bash ex.sh | expect

输出:

admin@admin:/tmp$ cat cmds.txt | bash ex.sh | expect 
spawn bash
admin@admin:/tmp$ echo hello
hello
admin@admin:/tmp$ echo goodbuy
goodbuy
admin@admin:/tmp$ exit
exit