为什么要在 Emacs 里面使用 Shell?

Shell 是 Unix 系统管理员生活的一部分。早期的 Shell 直接运行在各种各样的 Terminal 里面,随着时间的推移,我们有了 X Window。大量的 Shell 开始运行 Xterm 里面。对于笔者来说呢,更加喜欢让 Shell 运行在 Emacs 里面。将 Shell 运行在 Emacs 里面与运行在 Xterm 里面到底有什么不同呢?相信我,将 Shell 从 Xterm 里面搬出来绝对不是一个赚取眼球,标新立异的决定。这篇文章介绍了将 Shell 从 Xterm 里面搬到 Emacs 里面带来的各种改变。这篇文章适合 Emacs 的初级与中级用户,需要读者具有一定的 Shell 使用经验。最好具有较长时间的 Shell 使用经历,以更加充分的体会到 Emacs 带来的变化。文章中的内容谨代表作者的个人观点。不代表 IBM 的任何官方观点。所附代码仅在运行于 Cygwin 环境下的 GNU Emacs 当中测试通过。

为什么要在 Emacs 里面使用 Shell?

您可以访问“Emacs 编辑环境“系列教程来了解更多和 Emacs 相关的内容:

为什么要使用 Shell? 我不也太清楚,但是,在这样一个 Windows 横行的年代里,总是有着无数的 Unix 管理员在遍布全球的各个角落里默默奉献,保证着我们的世界继续运行。那么,为什么要在 Emacs 里面使用 Shell? Emacs 里面使用 Shell 和在其他地方相比,比如说 xterm,甚至是 Windows 的命令行窗口里面使用 Shell 有什么不一样呢?这个问题,我个人认为不是一个技术问题,而是一个生活舒适度的问题。之所以选择在 Emacs 里面使用 Shell,就是因为在 Emacs 里面会使你的生活的更加舒适。

生活舒适度的问题

信不信由你,人们总是希望生活的更加舒适。那么,把 Shell 搬到 Emacs 环境里究竟能够带来那些生活舒适度的提高呢?在回答这个问题之前,让我们先进行一个简单的热身运动。

大家都知道,现代的 Bourn Again Shell(bash) 要比古老的 Bourn Shell(sh) 用起来舒服多了。因为 Bourn Again Shell(Bash) 引入了很多非常舒服的新的特性。比如说历史 (History) 功能,比如说命令行编辑功能。这些都是大家非常喜欢的功能。不是吗?但是,问题是,如果你想在 Shell 的世界中生活的更加舒适,就会发现很多时候他都不能真正的让你满意。

通常来说,但凡有过在古老的 Bourn Shell(sh) 或者某些缺乏历史功能的 Korn Shell(ksh) 环境下的使用经验的人来说,Bourn Again Shell(bash) 的历史 (History) 功能都是一个非常可爱的功能。它提供了很多很好的重复历史命令的有趣方式,我们可以使用 ! 命令去全部或者部分的引用上一条刚刚执行过的命令,我们可以使用 ^^ 命令简单编辑上一条命令并且生成一条新的命令,我们可以也使用向上的箭头键去回朔查找许久以前曾经执行过的命令,然后使用命令行编辑功能随心所欲的编辑这条命令。但是这里面有一个非常隐蔽的问题:所有这一切,都是集中在“命令行”这个概念中的。说白了,各种各样的不同的 Shell 版本提供给我们的就是一个命令解释器,外加一个命令行编辑环境。

这样有什么不对吗?对,但是欲望总是没有止境的。为什么不能够全屏幕编辑呢?

让我们来看看一个很简单的例子。我有一个 Omegamon XE for Messaging 的安装。这是 IBM Tivoli 旗下的一款监控产品。通过与 IBM Tivoli Monitor 产品的集成,实现对 WebSphere MQWebSphere Message Broker 产品的运行监控,以及对 WebSphere MQ 产品的修改与配置。由于某种需要,现在我需要将一个 MQ Monitoring agent 停止下来。我不想将那个漫长的命令从头到尾输入一遍,因为我知道我可以使用 history | grep ‘itmcmd agent’ 命令从已经存在的命令历史里面找到曾经启动这个 agent 的命令,然后我所要做的,仅仅只是在原来命令的基础上将 start 参数修改为 stop 就可以了。但是……事实上 Shell 并没有给我一个修改这条命令的机会。


图 1

事实上我必须先用鼠标将屏幕上的第 437 条命令复制到剪贴板里面,然后把它粘贴到我的命令提示符后面,之后再使用 bash 的命令行编辑功能,将那个可爱的 start 参数修改为 stop。说实话,我的某些同事每天就是这样做的,另一些则是干脆将停止命令从头到尾再输入一遍。回答我一个问题,你有没有曾经也像我一样,在看到 history | grep 的输出的时候,曾经梦想过,能够直接在第 437 条命令上面改几个字母,然后就直接敲下回车呢?现在你可以了——在 Emacs 里面。在 Emacs 里面,你可以将你的 Shell“扩展”到全屏幕编辑。

让我们重新查找刚才提到的那条命令。这一次,我们不用 history | grep 的方法。是的,这个方法仍然管用。但是既然是在 Emacs 里面,我希望介绍一些更加 Emacs 化的使用方法,我们使用 Ctrl-r 组合键。如果你已经使用过 Emacs,但是从来还没有在 Emacs 里面看到过 shell 提示符的话,不妨跟我一起来,在 Emacs 当中输入 ESC-x 组合键,然后在提示缓冲区里面输入 shell(全部字母小写)回车,然后你就会在 Emacs 的编辑缓冲区里面看到熟悉的 shell 提示符了。在接下来的例子里面我们假设你已经执行过启动 MQ Monitoring agent 的那条命令了,大约是在 4 个小时前或者别的什么时候。现在要做的,就是把这个特定的 agent 停止下来。跟我一起在 Emacs 里面输入 Ctrl-r 组合键,这个时候你会在提示缓冲区里面看到 I-search backward: 这样的字样。没错,这个组合键对应的就是 Emacs 当中的回朔查找的功能。我们所要做的,就是像通常在一篇文档里面查找一个句子一样,在回朔查找提示符的后面输入 itmcmd agentEmacs 非常迅速的就把光标定位到了曾经执行过的 bin/itmcmd agent –o QM_106 start mq 这一行命令上面。就在这里,让我们把 start 修改为 stop,然后,直接就在这里按下回车键——修改以后的命令会自动的被复制到正确的 shell 提示符后面并且被执行。无穷无尽的拷贝与粘贴终于被终结了。

更理想的情况下,如果你想修改的命令还仍然显示在你当前的屏幕范围内(这在我的工作当中覆盖了大多数情况),甚至可以省略使用 Ctrl-r 组合进进行查找的过程,直接移动光标到你需要的命令,修改,或者回车就是了。


图 2





回页首


技术性击倒

上面提到的还只是一些很简单的事情。或者说是一些使用习惯方面的事情。每个人都有自己的生活习惯。我就见过一些人,他们甚至很少使用 History 功能。他们执行每一条命令都会从头到尾输入进去。如果中间有什么东西写错了,他们会停下来再输一遍。我只能承认我没有他们那么勤奋了。

下面我们要谈论一些真正技术性的问题。一个实际工作中的案例问题。我在上面提到过,我的日常工作的一部分就是使用 Omegamon XE for Messaging 产品,既然他是监控 WebSphere MQ 的一款产品,那么同样意味着我也会频繁使用 WebSphere MQ 产品。一天,我需要处理这样一个问题,我有 11 个处于停止状态的队列管理器(Queue Manager),他们全部需要启动起来。


图 3



本文转自IBM Developerworks中国

      请点击此处查看全文

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值