行操作

Bash 内置了 Readline 库。命令行因此具有了这个库提供的很多“行操作”的功能,比如命令的自动补全。

Bash 允许关闭这个库。

$ bash --noediting

上面命令中,--noediting参数关闭了 Readline,启动的 Bash 就不带有行操作功能。

光标移动

Readline 提供了许多快捷键,用来快速地启动光标。

  • Ctrl a 光标移到行首
  • Ctrl e 光标移到行尾
  • Ctrl f 光标向右(向前)移动一个字符(forward),与右箭头作用相同
  • Ctrl b 光标向左(向后)移动一个字符(back),与左箭头作用相同
  • Alt f 光标向右(向前)移动到词尾
  • Alt b 光标向左(向后)移动到词首

上面的快捷键用到Ctrl键和Alt键,其中Alt键也可以用Esc键代替。

清除屏幕

Ctrl l快捷键可以清除屏幕,与clear命令作用相同。

编辑操作

下面的快捷键可以编辑命令行内容。

  • Ctrl-d 删除光标位置的字符(delete)
  • Ctrl-w 删除光标前面的单词
  • Ctrl-t 光标位置的字符与它前面一位的字符交换位置(transpose)
  • Alt-t 光标位置的词与它前面一位的词交换位置(transpose)
  • Alt-l 将光标位置至词尾转为小写(lowercase)
  • Alt-u 将光标位置至词尾转为大写(uppercase)

剪切和粘贴快捷键如下。

  • Ctrl k 剪切光标位置到行尾的文本
  • Ctrl u 剪切光标位置到行首的文本
  • Alt d 剪切光标位置到词尾的文本
  • Alt Backspace 剪切光标位置到词首的文本
  • Ctrl y 在光标位置粘贴文本

同样地,Alt 键可以用 Esc 代替。

自动补全

命令输入到一半的时候,可以按一下tab键,Readline 会自动补全命令或路径。

如果符合条件的命令或路径有多个,就需要连续按两次tab键,Readline 会显示所有符合条件的命令或路径,用来提示。

除了命令或路径,tab还可以补全其他值。如果一个值以$开头,则按下tab键会补全变量;如果以~开头,则补全用户名;如果以@开头,则补全主机名(hostname),主机名以列在/etc/hosts文件里面的主机为准。

Alt + Shift + ?也会列出可能的补全,与连按两次tab键作用相同。Alt + Shift + *在命令行一次性插入所有可能的补全。

操作历史

Bash 的操作历史存放在用户主目录的.bash_history文件中,默认储存500个操作。

history命令用来展示这个文件。

$ history | less

如果想要搜索或执行某个以前的命令,可以像下面这样操作。

# 搜索某个命令
$ history | grep /usr/bin

上面命令返回.bash_history里面,那些包含/usr/bin的命令。

还有一种更简便的搜索方式,就是按下Ctrl - r,然后每键入一个字符,Shell 就会自动在历史文件中,查询并显示匹配的结果。这时,上下移动选中想要执行的命令,按下回车键即可。

下面是一些与操作历史相关的快捷键。

  • Ctrl - p 显示上一个命令,与向上箭头效果相同(previous)
  • Ctrl - n 显示下一个命令,与向下箭头效果相同(next)
  • Alt - < 显示第一个命令
  • Alt - > 显示最后一个命令,即当前的命令
  • Ctrl - o 执行历史文件里面的当前条目,并自动显示下一条命令。这对重复执行某个序列的命令很有帮助。

感叹号可以用于执行历史文件里面的命令。如果想要执行.bash_history里面的第88个命令,可以像下面这样操作。

$ !88

感叹号的快捷键说明如下。

  • !! 执行上一个命令
  • ![number] 执行历史文件里面指定行号的命令
  • ![string] 执行上一个以指定字符串开头的命令
  • !?[string] 执行上一个包含指定字符串的命令

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""