加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 百科网 (https://www.baikewang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

Bash 行操作

发布时间:2022-12-12 10:54:17 所属栏目:Unix 来源:
导读:  Bash 行操作

  网道(WangDoc.com),互联网文档计划

  简介

  Bash 内置了 Readline 库,具有这个库提供的很多“行操作”功能,比如命令的自动补全,可以大大加快操作速度。

 
  Bash 行操作
 
  网道(WangDoc.com),互联网文档计划
 
  简介
 
  Bash 内置了 Readline 库,具有这个库提供的很多“行操作”功能,比如命令的自动补全,可以大大加快操作速度。
 
  这个库默认采用 Emacs 快捷键,也可以改成 Vi 快捷键。
 
  $ set -o vi
  下面的命令可以改回 Emacs 快捷键。
 
  $ set -o emacs
  如果想永久性更改编辑模式(Emacs / Vi),可以将命令写在~/.inputrc文件,这个文件是 Readline 的配置文件。
 
  set editing-mode vi
  本章介绍的快捷键都属于 Emacs 模式。Vi 模式的快捷键,读者可以参考 Vi 编辑器的教程。
 
  Bash 默认开启这个库,但是允许关闭。
 
  $ bash --noediting
  上面命令中,--noediting参数关闭了 Readline 库,启动的 Bash 就不带有行操作功能。
 
  光标移动
 
  Readline 提供快速移动光标的快捷键。
 
  上面快捷键的 Alt 键,也可以用 ESC 键代替。
 
  清除屏幕
 
  Ctrl + l快捷键可以清除屏幕,即将当前行移到屏幕的第一行,与clear命令作用相同。
 
  编辑操作
 
  下面的快捷键可以编辑命令行内容。
 
  使用Ctrl + d的时候,如果当前行没有任何字符,会导致退出当前 Shell,所以要小心。
 
  剪切和粘贴快捷键如下。
 
  同样地,Alt 键可以用 Esc 键代替。
 
  自动补全
 
  命令输入到一半的时候,可以按一下 Tab 键,Readline 会自动补全命令或路径。比如,输入cle,再按下 Tab 键,Bash 会自动将这个命令补全为clear。
 
  如果符合条件的命令或路径有多个,就需要连续按两次 Tab 键,Bash 会提示所有符合条件的命令或路径。
 
  除了命令或路径,Tab 还可以补全其他值。如果一个值以$开头,则按下 Tab 键会补全变量;如果以~开头,则补全用户名;如果以@开头,则补全主机名(hostname),主机名以列在/etc/hosts文件里面的主机为准。
 
  自动补全相关的快捷键如下。
 
  上面的Alt键也可以用 ESC 键代替。
 
  操作历史 基本用法
 
  Bash 会保留用户的操作历史,即用户输入的每一条命令都会记录。有了操作历史以后,就可以使用方向键的↑和↓,快速浏览上一条和下一条命令。
 
  退出当前 Shell 的时候,Bash 会将用户在当前 Shell 的操作历史写入~/.bash_history文件,该文件默认储存500个操作。
 
  环境变量HISTFILE总是指向这个文件。
 
  $ echo $HISTFILE
  /home/me/.bash_history
  history命令会输出这个文件的全部内容。用户可以看到最近执行过的所有命令,每条命令之前都有行号。越近的命令,排在越后面。
 
  $ history
  ...
  498 echo Goodbye
  499 ls ~
  500 cd
  输入命令时,按下Ctrl + r快捷键,就可以搜索操作历史,选择以前执行过的命令。这时键入命令的开头部分,Shell 就会自动在历史文件中,查询并显示最近一条匹配的结果,这时按下回车键unix命令行,就会执行那条命令。
 
  下面的方法可以快速执行以前执行过的命令。
 
  $ echo Hello World
  Hello World
  $ echo Goodbye
  Goodbye
  $ !e
  echo Goodbye
  Goodbye
  上面例子中,!e表示找出操作历史之中,最近的那一条以e开头的命令并执行。Bash 会先输出那一条命令echo Goodbye,然后直接执行。
 
  同理,!echo也会执行最近一条以echo开头的命令。
 
  $ !echo
  echo Goodbye
  Goodbye
  $ !echo H
  echo Goodbye H
  Goodbye H
  $ !echo H G
  echo Goodbye H G
  Goodbye H G
  注意,!string语法只会匹配命令,不会匹配参数。所以!echo H不会执行echo Hello World,而是会执行echo Goodbye,并把参数H附加在这条命令之后。同理,!echo H G也是等同于echo Goodbye命令之后附加H G。
 
  由于!string语法会扩展成以前执行过的命令,所以含有!的字符串放在双引号里面,必须非常小心,如果它后面有非空格的字符,就很有可能报错。
 
  $ echo "I say:\"hello!\""
  bash: !\: event not found
  上面的命令会报错,原因是感叹号后面是一个反斜杠,Bash 会尝试寻找,以前是否执行过反斜杠开头的命令,一旦找不到就会报错。解决方法就是在感叹号前面,也加上反斜杠。
 
  $ echo "I say:\"hello\!\""
  I say:"hello\!"
  history 命令
 
  前面说过,history命令能显示操作历史,即.bash_history文件的内容。
 
  $ history
  使用该命令,而不是直接读取.bash_history文件的好处是,它会在所有的操作前加上行号,最近的操作在最后面,行号最大。
 
  通过定制环境变量HISTTIMEFORMAT,可以显示每个操作的时间。
 
  $ export HISTTIMEFORMAT='%F %T  '
  $ history
  1  2013-06-09 10:40:12   cat /etc/issue
  2  2013-06-09 10:40:12   clear
  上面代码中,%F相当于%Y - %m - %d,%T相当于%H : %M : %S。
 
  只要设置HISTTIMEFORMAT这个环境变量,就会在.bash_history文件保存命令的执行时间戳。如果不设置,就不会保存时间戳。
 
  环境变量HISTSIZE设置保存历史操作的数量。
 
  $ export HISTSIZE=10000
  上面命令设置保存过去10000条操作历史。
 
  如果不希望保存本次操作的历史,可以设置HISTSIZE等于0。
 
  export HISTSIZE=0
  如果HISTSIZE=0写入用户主目录的~/.bashrc文件,那么就不会保留该用户的操作历史。如果写入/etc/profile,整个系统都不会保留操作历史。
 
  环境变量HISTIGNORE可以设置哪些命令不写入操作历史。
 
  export HISTIGNORE='pwd:ls:exit'
  上面示例设置,pwd、ls、exit这三个命令不写入操作历史。
 
  如果想搜索某个以前执行的命令,可以配合grep命令搜索操作历史。
 
  $ history | grep /usr/bin
  上面命令返回.bash_history文件里面,那些包含/usr/bin的命令。
 
  操作历史的每一条记录都有编号。知道了命令的编号以后,可以用感叹号 + 编号执行该命令。如果想要执行.bash_history里面的第8条命令,可以像下面这样操作。
 
  $ !8
  history命令的-c参数可以清除操作历史。
 
  $ history -c
  相关快捷键
 
  下面是一些与操作历史相关的快捷键。
 
  感叹号!的快捷键如下。
 
  下面是!$和!*的例子。
 
  $ cp a.txt b.txt
  $ echo !$
  b.txt
  $ cp a.txt b.txt
  $ echo !*
  a.txt b.txt
  上面示例中,!$代表上一个命令的最后一个参数(b.txt),!*代表上一个命令的所有参数(a.txt b.txt)。
 
  下面是^string1^string2的例子。
 
  $ rm /var/log/httpd/error.log
  $ ^error^access
  rm /var/log/httpd/access.log
  上面示例中,^error^access将最近一条含有error的命令里面的error,替换成access。
 
  如果希望确定是什么命令,然后再执行,可以打开histverify选项。这样的话,使用!快捷键所产生的命令,会先打印出来,等到用户按下回车键后再执行。
 
  $ shopt -s histverify
  其他快捷键
 
  上面的Alt + .快捷键,对于很长的文件路径,有时会非常方便。因为 Unix 命令的最后一个参数通常是文件路径。
 
  $ mkdir foo_bar
  $ cd #按下 Alt + .
  上面例子中,在cd命令后按下Alt + .,就会自动插入foo_bar。
 

(编辑:百客网 - 百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章