免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9387 | 回复: 13
打印 上一主题 下一主题

请教如何expect读取文件命令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-03-27 17:36 |只看该作者 |倒序浏览
expect使用很方便,可是每次写脚本的时候都需要不断的expect 、send
我想把命令写到一个文件中去,然后用
for ...
read i from file
expect "$PROMPT"
send $i

这种形式来简化expect脚本的书写,不知道如何实现。

论坛徽章:
0
2 [报告]
发表于 2003-03-28 02:48 |只看该作者

请教如何expect读取文件命令

...

做是可以这样做,只是偶觉得没省多少事,你仍然要把主要命令写到一个文件中去。在 vi 中用 Y, p 来编辑不是也挺方便的吗?

  1. #!/bin/sh
  2. ...
  3. expect <<EOF
  4. spawn su - user
  5. `while read PROMPT CMD; do
  6.     expect "$PROMPT"
  7.     send "$CMD"
  8. done < expect.txt `
  9. interact
  10. EOF
复制代码


注:expect.txt 格式

prompt1  command1
prompt2  command2
prompt3  command3
...

论坛徽章:
0
3 [报告]
发表于 2003-03-28 08:58 |只看该作者

请教如何expect读取文件命令

呵呵,太感谢了。
我只知道expect里面可以用循环一类的东西,可是没有找到它的语法格式。

如果可能的话,红袖能介绍一下expect中的语法吗?比如 if , for 之类的。
我用 man expect 时,没有找到关于expect的if , for 之类的语法介绍。看它的example时,发现它的if 和 shell里面的格式还不太一样呢。

如果能给一个介绍它的语法的网页也可以。是不是看tcl的语法就可以了?

论坛徽章:
0
4 [报告]
发表于 2003-03-28 14:40 |只看该作者

请教如何expect读取文件命令

发现一个有趣的现象,在
expect <<EOF

...

EOF
中,可以引用shell中的变量!这样编程很方便。

另外请教红袖,expect <<EOF 这种形式,好象不能为expect指定参数吧
我用 expect xxx <<EOF形式传递参数,然后用 [lindex $argv 0]来引用,结果会出错。确实是不能这样传递参数吗?不过从shell中可以引用变量就已经足够了,传递参数已经不是必需的了。呵呵


我问的这个问题,是用于使用sftp传递文件。sftp必须用expect才能自动工程,不象ftp
多谢了。

论坛徽章:
0
5 [报告]
发表于 2003-03-31 15:55 |只看该作者

请教如何expect读取文件命令

红袖老大,您的shell不能执行呀
shell如下
#!/bin/sh
expect <<EOF
        spawn su - user
        `while read PROMPT CMD; do
          expect "$PROMPT"
          send "$CMD"
        done < expect.txt `
        interact
        EOF
exit
结果如下:
<root> ./test.sh
couldn't read file "*]/": no such file or directory
./test.sh: send: not found
couldn't read file "*]/": no such file or directory
./test.sh: send: not found
couldn't read file "*]/": no such file or directory
./test.sh: send: not found
couldn't read file "*]/": no such file or directory
./test.sh: send: not found
couldn't read file "*]/": no such file or directory
./test.sh: send: not found
couldn't read file "*]/": no such file or directory
./test.sh: send: not found
spawn su - user
invalid command name "EOF"
    while executing
"EOF
"

另外expect.txt如下:
cat expect.txt
*]/ ls -l /
*]/ ifconfig -a
*]/ uname -a

我的提示符:
[009]/root/ftp <root>

论坛徽章:
0
6 [报告]
发表于 2003-03-31 21:42 |只看该作者

请教如何expect读取文件命令

...

这段代码我没有试过, 因为没有 expect 环境.

今天回家后试试.

论坛徽章:
0
7 [报告]
发表于 2003-04-01 14:36 |只看该作者

请教如何expect读取文件命令

谢谢

论坛徽章:
0
8 [报告]
发表于 2003-04-08 17:17 |只看该作者

请教如何expect读取文件命令

这个帖子沉底了,红袖没看到吧

论坛徽章:
0
9 [报告]
发表于 2003-04-08 17:28 |只看该作者

请教如何expect读取文件命令

...

哦,忘记了,不过我记得有一篇铁子你说问题解决了的,呵呵。

好象我试过不行。我上次这么想,是因为我记得在 expect 中用过 `cat file` 这样的写法,也许是我记错了~~~

论坛徽章:
0
10 [报告]
发表于 2003-04-09 13:13 |只看该作者

请教如何expect读取文件命令

呵呵,没有解决。前段时间请教您的问题一大堆,除了这个,好象都解决了。
呵呵,谢谢红袖老大。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP