我如何将 expect 与 bash 脚本一起使用
how do I use expect along with a bash script
我有一个包含一堆操作的文本文件,我想使用我的 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
我该怎么做?
您可以使用 bash 脚本为 expect 创建一系列命令并将它们发送给它。
例如你有 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
我不明白你的问题。在我看来,最简单的事情就是让 expect 处理读取文件:
#!/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
然后
我有一个包含一堆操作的文本文件,我想使用我的 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
我该怎么做?
您可以使用 bash 脚本为 expect 创建一系列命令并将它们发送给它。
例如你有 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
我不明白你的问题。在我看来,最简单的事情就是让 expect 处理读取文件:
#!/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
然后