免费注册 查看新帖 |

Chinaunix

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

[Perl][Pty]如何能够知道当前是linux命令行模式还是类似vi的编辑模式中 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-12 09:23 |只看该作者 |倒序浏览
10可用积分
在linux命令行模式prompt格式一般为[$usr@$host $path]#
在进入vi后可能捕获到的hex可能包含 1b 5b 3f 32等特殊含义的东东在里面
怎样才能正确识别当前是在vi的范围内

抱歉,说的不是非常清楚

目的是想对bash命令行下用户输入的命令进行先检查后执行的过程,对vi等编辑器的输入内容不做检查

1 首先创建pty (/dev/tty)
2 pty创建后exec调用ssh $host
3 STDIN -> pty->syswrite  #向ssh发送操作
4 pty->sysread #ssh回显
5 通过判断pty->sysread来知道当前是否还是在vi中

想在从STDIN输入后先经过命令检查才能发给ssh #每个命令以回车结束
*不想检查vi中的输入内容
*不能使用readline,它会破坏很多东西,例如more命令回显就不正常


现在这个功能可以通过所有pty->sysread返回的prompt部分实现,不过需要将所有sysread读回来的内容转换成hex才能分析出来
为了万无一失的匹配,当终端输入大量文本后,必然cpu会到99%
有什么好的办法吗〉?

[ 本帖最后由 huhuegg 于 2008-12-16 15:37 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-12-12 14:30 |只看该作者
不懂,但是题目也没看懂。
先帮大伙问问,你要写的这个perl脚本是要跑在什么地方的?
为什么还会涉及到 vi 呢?
说说整体的结构(谁运行谁、谁给谁提供输入输出等)

论坛徽章:
0
3 [报告]
发表于 2008-12-12 15:03 |只看该作者
也没看明白:wink:

论坛徽章:
0
4 [报告]
发表于 2008-12-12 17:05 |只看该作者
1 首先创建pty (/dev/tty)
2 pty创建后exec调用ssh $host
3 STDIN -> pty->syswrite  #向ssh发送操作
4 pty->sysread #ssh回显

想在从STDIN输入后先经过命令检查才能发给ssh #每个命令以回车结束
*不能使用readline,它会破坏很多东西,例如more命令回显就不正常


现在这个功能可以通过所有pty->sysread返回的prompt部分实现,不过需要将所有sysread读回来的内容转换成hex才能分析出来
为了万无一失的匹配,当终端输入大量文本后,必然cpu会到99%

正在想更正确的方法

[ 本帖最后由 huhuegg 于 2008-12-12 17:11 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2008-12-12 17:07 |只看该作者
楼主想监视用户登录后的操作。

论坛徽章:
0
6 [报告]
发表于 2008-12-12 17:12 |只看该作者
如果只是监视的话已经实现,不需要那么麻烦
就是cmd的拦截控制有问题。。。。。。

论坛徽章:
0
7 [报告]
发表于 2008-12-12 17:57 |只看该作者
看出来了

论坛徽章:
0
8 [报告]
发表于 2008-12-16 15:35 |只看该作者
问题解决了,方法仍然是过滤所有pty->sysread返回内容,$buf以BELL结尾的才拿出来做hex分析出来,
确定真正的prompt,并在获取到前一个prompt并接受到readline结束标记后判断为命令交互部分开始,
直到下一个prompt收到

论坛徽章:
0
9 [报告]
发表于 2009-11-27 11:17 |只看该作者
最近打算做一个自动登录服务器,方便集中管理,记录每一条指令。大体思路是找一台linux pc,用户登录后自动执行一个程序,只能执行telnet/ssh,密码保存在服务器上,实现自动登录。
楼主能否共享一下代码?
尝试了用expect,但是interact无法实现命令的控制和灵活的log。
用pty处理行命令已经可以了,但是在处理单键输入遇到困难,例如vi内部的命令操作,请大家支个招,谢谢。

论坛徽章:
0
10 [报告]
发表于 2009-11-27 11:25 |只看该作者
这样看一下不就行了:
bash-3.2# set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off    off表示关闭了vi模式,  如果你需要vi模式, 执行" set -o vi "就可以了
xtrace          off
bash-3.2#
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP