免费注册 查看新帖 |

Chinaunix

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

system执行expect脚本问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-12 00:07 |只看该作者 |倒序浏览
太奇怪了!
我有个expect脚本,在shell下执行很正常,如:
./telnet.sh 192.168.10.60 test test
这样可以正常实现登录
然后我编程使用system()函数来执行这个脚本,结果也正常。
tt.c的内容如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
main()
{
        char strCmd[512];

        strcpy(strCmd,"/home/usp/bin.sh/telnet.pansky 192.168.10.57 dcc dccdcc ");
        printf("cmd[%s]\n");
        system(strCmd);
}
~

但是,当我fork()一个子进程来执行时,却出错了,不知道有什么原因:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
main()
{
        char strCmd[512];

        if( fork() > 0 ) exit(0);

        strcpy(strCmd,"/home/usp/bin.sh/telnet.pansky 192.168.10.57 dcc dccdcc ");
        printf("cmd[%s]\n");
        system(strCmd);
}
~
错误信息:
cmd[/home/usp/bin.sh/telnet.sh 192.168.10.57 dcc dccdcc ]
[usp@fcshost usp]$ Telnet escape character is 'v'.
Trying 192.168.10.57...
Connected to 192.168.10.57.
Escape character is 'v'.
Red Hat Linux release 9 (Shrike)
Kernel 2.4.20-8 on an i686
login: dcc
Password: ioctl(raw): I/O error


===================================================
telnet.sh的内容:

#!/home/usp/bin/expect
if { $argc < 3 } {
        puts stderr "Usage: $argv0 IPAdress UserId Passwd"
        exit
}
set IPADDR [lindex $argv 0]
set LOGIN  [lindex $argv 1]
set PASSWD [lindex $argv 2]
set timeout 10
spawn -noecho telnet -e vt100 $IPADDR
expect {
        "*login:" {
                send "$LOGIN\r"
        }
        "*登录*" {
                send "$LOGIN\r"
        }
        timeout {exit 0}
}
expect {
        "*assword:" {
                send "$PASSWD\r"
                interact
                exit 0
        }
        "*密码*" {
                send "$PASSWD\r"
                interact
                exit 0
        }
        timeout {exit 0}
        eof     {exit 0}
}

论坛徽章:
0
2 [报告]
发表于 2008-11-12 00:15 |只看该作者
不好意思,我自己解决了!
我的父进程没有等待子进程,自己退出了,这样,子进程成为了init的子进程,环境已经改变了,所以出错了,我让父进程等待就OK了!

论坛徽章:
0
3 [报告]
发表于 2008-11-12 09:55 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP