Emacs中的shell--Eshell使用笔记

1 什么是Eshell?

 Eshell是Emacs完全用Elisp实现的类UNIX shell. 由于它完全是由Elisp实现的,因此它具有与Emacs相同的可移植性,而且它可以很自然的与Elisp代码相结合. 事实上,你完全可以在Eshell下运行lisp代码

2 Eshell与普通shell有什么不同?

  • Eshell支持输出重定向但不支持输入重定向

  • Eshell没有job control功能,它不支持多进程的后台切换

  • Eshell没办法输入C-z,因为C-z会被emacs所捕获.

  • Eshell可以识别更多类型的参数

    • 字符串

    • 数字

    • Lisp列表

    • Lisp符号

    • Emacs buffer

    • Emacs process handles


  • Eshell类似于unix的shell,因此若你是在windows下运行Eshell,你会发现像dir,copy这一类cmd.exe执的内置命令无法使用了,取而代之的是ls,cp这一类的unix命令

  • Eshell并不直接调用exec这样的内核函数,它把输入的命令转换成一个可执行的Lisp代码形式,然后执行这段代码.

           要查看输入的命令被转成什么样的Lisp代码,可以输入`eshell-parse-command "echo hello"`


  • Eshell的多开比较复杂,若你已经打开了一个Eshell,再允许M-x eshell,只会跳转到那个eshell而已. 解决的办法有:

    • 先用rename-buffer把打开的那个*eshell* buffer重命名为其他命令,再调用M-x eshell

    • 使用C-u 数字n M-x eshell会创建一个编号为n的的eshell窗口


3 命令

3.1 命令提示符

  你可以通过变量`eshll-prompt-function`自定义eshell的命令提示符. 该变量可以是一个匿名函数或一个函数名称,该函数的返回值被显示为Eshell的命令提示符号.

  当你改了自己的命令提示符后,为了让Eshell能够识别出一行输出的那个部分是命令提示符,你还需要冲定义变量`eshll-prompt-regexp`,符合该正则的部分被识别为命令提示符

3.2 Eshell中查找命令的顺序为(以cp命令为例)

  1. 输入的是完整路径(/bin/cp),则直接调用该路径的命令

  2. 查询命令前缀,若为*(由变量`eshell-explicit-command-char`决定),并且能够在search path中查找到命令,则执行查找到的命令

  3. 查询定义的alias

  4. 在search path,$PATH中查询该命令

  5. 查询同名的Lisp函数cp或eshell定义的命令eshell/cp

  但若变量`eshell-prefer-lisp-functions`设置为t,则会最优先搜索elisp函数和eshell定义的命令.

  你可以用which命令来查看命令的指向. 例如

 ~ $ which ls
eshell/ls is a compiled Lisp function in `em-ls.el'  

  如果你想调用外部的同名命令,可以在命令前加星号*. 例如

 ~ $ which *ls
/bin/ls

3.3 内置命令

  eshell自己实现了许多的内置命令,例如ls. 但通常这些内置命令只是实现了最常用的那些功能. 但是Eshell足够聪明,当你输入了一个内部命令不支持的参数时,eshell会自动调用外部命令来执行

  大多数的eshell内置命令都提供–help选项,输出帮助信息

  • addpath 路径/路径列表

                     把路径加入到PATH环境变量中,如果不加参数,则输出当前的PATH变量值


  • <
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值