免费注册 查看新帖 |

Chinaunix

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

如何用perl写个类shell [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-14 17:17 |只看该作者 |倒序浏览
我想给程序加个壳,可以使用命令行的方式访问内部数据,最好输入命令时能和linux shell一样控制自如,哪位高手请指教...

论坛徽章:
0
2 [报告]
发表于 2011-02-14 17:43 |只看该作者
把perl脚本文件chmod一下,变成可执行,最好名字简单点,然后放到/usr/bin下面,就可以像用shell命令一样使用了,不知道你是不是这个意思。
我自己写得多文件查找就是这样用的
  1. $ fs
  2. usage: fs [-t filetype]/[-n num]/[-a] [string] [directory](opt)
  3. To find the string under the directory

  4.         -t filetype         Search the file in filetype
  5.         -n num                Print [num] items
  6.         -a                whole string match
  7.         -l num                the max level deepth of directory you want to search
  8.         -N num                select files which contain string of num or more times
  9.         -c                Match case
  10.         -i                display the line number
  11.         -f filename        find the file
  12. [string]        the string want to search
  13. [directory]        the directory to search, the default is the current one
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-02-14 17:56 |只看该作者
本帖最后由 paktc 于 2011-02-14 17:59 编辑

楼主是想借perl 自己打造一个命令行机制对吧。
然后可以自己设置命令,就像在shell中输入命令一样做perl的事情。

俺试了一下$command=<STDIN>;获取用户输入
然后正则表达式处理$command并作出相应操作。

不过<STDIN>的情况和 直接在shell输入信息的情况有些不同,
编辑一行命令时不能直接退格、左、右,
这些方向键会被转换成字符并显示在命令行上(我是不太习惯)

论坛徽章:
0
4 [报告]
发表于 2011-02-15 10:26 |只看该作者
对,paktc的实现方式和我一样,我就是觉得这种实现方式很不方便,不能使用左右键编辑,才问有没什么高明的办法来实现的,各位大鸟请指教!

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
5 [报告]
发表于 2011-02-15 12:55 |只看该作者

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2011-02-15 13:37 |只看该作者
楼主是想借perl 自己打造一个命令行机制对吧。
然后可以自己设置命令,就像在shell中输入命令一样做perl的 ...
paktc 发表于 2011-02-14 17:56

用 Term::ReadLine 就可以了。

论坛徽章:
0
7 [报告]
发表于 2011-02-15 16:10 |只看该作者
本帖最后由 paktc 于 2011-02-15 16:22 编辑

刚刚去ubuntu10.04试了一下,
<STDIN> 跟 shell命令read 的效果是类似的,方向键同样会转换为字符。

Desktop:~/$read
test^[[D^[[Ctest  #这里我按下了一个左,一个右,变成了字符

不过可以退格,但是中文的时候退格很郁闷的…… 一个字的编码值就这么对半分了

http://search.cpan.org/~rjbs/perl-5.12.3/lib/Term/ReadLine.pm
Term::ReadLine 那个实例也一样
  use Term::ReadLine;
  my $term = Term::ReadLine->new('Simple Perl calc');
  my $prompt = "Enter your arithmetic expression: ";
  my $OUT = $term->OUT || \*STDOUT;
  while ( defined ($_ = $term->readline($prompt)) ) {
    my $res = eval($_);
    warn $@ if $@;
    print $OUT $res, "\n" unless $@;
    $term->addhistory($_) if /\S/;
  }



==========================================
感觉可以去学一下网页或者可视化编程,自己弄个小框框。 不过路比较长就是了

论坛徽章:
0
8 [报告]
发表于 2011-02-15 18:04 |只看该作者
我也试了一下效果,跟paktc说的一样。

我看有的软件在没有GUI的时候也是可以左右键移动的,没有出现乱码,不知道是怎么实现的...

论坛徽章:
0
9 [报告]
发表于 2011-02-15 23:28 |只看该作者
本帖最后由 paktc 于 2011-02-15 23:43 编辑

回复 8# EDAlinux


    死心吧…… 应该涉及到框架源码的,
测试情况:
bash下输入方向键 OK,调用pl,方向键变成字符^[[D ^[[C ....
bash下执行 read命令,上下左右同样变成字符    read是bash内嵌的
bash下执行 bc 命令,此时左右键正常移动。 `whereis bc`找到 /usr/bin/bc , 得知bc是一个独立的程序

试了一下 apt-get install fish 安装一个fish终端,这下面的read ,左右键可以使用。
但这个read 是属于fish的   

=。= 由此可知这是一个程序对方向键输入信号截取形式不同。
perl脚本归类于/usr/bin/perl的
不知道perl有没有相关的参数开关?

况且即使解决了这个问题,输入中文的时候用退格键编辑会对半分,最终结果变成乱码,很恐怖

我正准备为此学一下可视化方面的,自己弄一个框算了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
10 [报告]
发表于 2011-02-16 07:04 |只看该作者
回复 1# EDAlinux

http://www.focusresearch.com/gregor/sw/psh/

CPAN上有Perl shell(psh)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP