2 nicolejang nicolejang 于 2015.05.28 00:18 提问

关于linux下cgi使用expect的问题

我有一个程序 在终端下使用正常

我希望给它做一个html页面 因此html页面需要调用cgi脚本
我的cgi脚本是用shell写的 中间调用了expect的命令
因为我的程序其中一步需要输入密码
但是一直不能实现我的需求
脚本在中间会停住不动。。。(我不知道应该如何形容它)
屏幕显示是这样的

root@nicole-virtual-machine:/usr/local/apache/cgi-bin# ./decrypt
Content-type: text/html

spawn ./ibe decrypt 410909971@qq.com < 2.txt >3.txt
private key password: 2222
(暂停一会 程序自己就跳出来了 )
eofroot@nicole-virtual-machine:/usr/local/apache/cgi-bin#
3.txt文件也没有生成。
下面是我的CGI脚本 恳请大神指导 谢谢!
#! /bin/bash

echo Content-type: text/html

echo ""
echo ""

eval /usr/local/apache/cgi-bin/proccgi.sh $*

cd /home/nicole/ibe

expect<<!
spawn ./ibe decrypt 410909971@qq.com < 2.txt >3.txt
expect "private key password:"
send "2222\r"
expect eof
send_user "eof"
!

4个回答

xy707707
xy707707   2015.05.28 08:37

关注着问题的解决 ,,,具有借鉴意义啊

nswcfd
nswcfd   2015.05.28 09:06

建议在server端用ps先确认,是停在bash脚本里,还是停在expect脚本里。

nswcfd
nswcfd   2015.05.28 09:44

./ibe decrypt程序,是从哪个设备获取private key password的?

一种可能性是标准输入,由于已经<2.txt进行了重定向,那么只能从2.txt里去获取key。
另外一种可能性是程序内部从/dev/tty读取,那么就需要expect把2222送到这个设备。在这种情况下,应该使用expect_tty和send_tty.

PS,还需要考虑 ./ibe decryp把"private key password:"这条prompt送到tty还是送到stdout(已经>3.txt)
nswcfd
nswcfd 请忽略“使用expect_tty和send_tty“这句话。如果没有bash重定向的话,stdin已经被expect重定向到pseudo tty了,跟/dev/tty是一致的。
2 年多之前 回复
nswcfd
nswcfd   2015.05.28 10:19

另外,expect/spawn的命令行是不支持shell重定向的,这样的,实际传递给./ibe 6个参数。后面4个是两个重定向符号,以及两个重定向文件。
如果需要的,换成spawn bash -c "you_cmd_with_io_redirection output"

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!