论坛: 菜鸟乐园 标题: 【转】Unix/Linux下一个简单的shellinterpreter--wish 复制本贴地址    
作者: c_clown [c_clown]    论坛用户   登录
Unix/Linux下一个简单的shell interpreter--wish

【文章作者:willy123】


一个完整的shell至少应该具备词法和语法分析两种功能,就像bash一样,甚至可以执

行编写自己的脚本,从这个意义上说wish目前是难以做到的。Lex 和yacc是两大能够帮你

达到目的的很好的工具,只可惜我没有足够的时间和精力来研究他们。这里是是简单介绍下

wish的一些基本用法和如何编译使用

一:wish的编译和使用

下载Wish-0.01-src.tar.gz后,命令行下执行 tar -zxvf Wish-0.01-src.tar.gz ,这样就会得

到一个以文件名命名的文件夹,里面有四个文件,wish.h和 wishshell_main.c这两个是源代

码文件,makewish是编译脚本,readme.pdf就是你现在看到的这篇说明文档,里面包含了

wish的一些基本说明。

    使用  ./ makewish 命令运行脚本(如无法运行,提示权限不够,请使用chmod 777

makewish 命令修改文件权限为可执行),如果提示:wish shell makes successfully,那么说明编

译成功,在同一文件夹下应该会得到一个名为wish的文件。如果提示error can’t make it ,说

明编译失败。一个可能的原因是您的机子里没有安装gcc,请手动编译源文件或者更改脚本

内容进行编译。

    成功得到wish文件后,便可以执行了,执行./wish,就进入到wish shell 的环境中了。

如果您想让某个用户的shell改变成wish shell,那么可以通过编辑/etc/passwd中的相应用户对

应的shell域进行修改,例如将原来的/bin/bash字段修改成/bin/wish,然后将wish 复制到/bin

目录下即可。这样当你下次以该用户登录Unix/linux系统时便可以直接使用wish shell 了。

二:wish的基本功能

(1)作为一个shell,wish具备执行内部和外部命令的功能,所谓外部命令就是位于PATH

变量目录中的一系列命令如ls,cat,vi,等等,内部命令则是wish内部自带的命令,主要有:

1: cd 命令:用于更改当前目录,可以通过此命令更改当前目录。

2: getenv 命令:用于打印shell环境变量,如PATH,HOME,LOGNAME等等

3: info 命令:显示 wish shell的简要介绍

4: exit 命令:用于退出wish shell



(2)支持同时执行多个以“;”间隔的命令

例如可以执行

Ls ; pwd ; ps 同时执行文件显示,显示当前目录,显示系统进程这三个命令

(3)单管道功能

  例如可以执行

  Ls �Cl |  grep 123 寻找当前目录下文件名中含有123的文件



(4)I/O重定向功能

    包括输入和输出重定向:<,>

  例如 ls �Cl > listfile 会建立listfile文件,显示当前文件的列表
     
      Wc < listfile 会从listfile中读出内容,统计词数



  (5)处理信号的功能

      当运行一些比较大的程序时,可以在程序末尾加上 & 符号来后台运行这些程序
   
      例如 find /root 123 &



(6) bash是一个强大的shell,可以编写执行自己的脚本,wish中也可以运行bash编写的

脚本,可以通过 “ bash xxxx ” 来执行命令, 其中的xxx为你编写的bash脚本

值得注意的是,wish中对于其上功能没有做到很好的复合,也就是你同时运行 | 和 &

其中的 & 不会被解释,还有并不支持同一语句中的多个管道。

地主 发表时间: 09-02-08 01:09

论坛: 菜鸟乐园

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号