type
status
date
slug
summary
tags
category
icon
password
Property
Bash内置了
Readline
库,具有这个库提供的很多“行操作”功能,比如命令的自动补全,可以大大加快操作速度。默认采用 Emacs 快捷键,也可以改成 Vi 快捷键。如果想永久性更改编辑模式(Emacs / Vi),可以将命令写在
~/.inputrc
文件,这个文件是 Readline 的配置文件。Bash 默认开启这个库,但是允许关闭。
下面介绍的快捷键都属于 Emacs 模式。
光标移动
Readline 提供快速移动光标的快捷键:
Ctrl + a
:移到行首。
Ctrl + b
:向行首移动一个字符,与左箭头作用相同。
Ctrl + e
:移到行尾。
Ctrl + f
:向行尾移动一个字符,与右箭头作用相同。
Alt + f
:移动到当前单词的词尾。
Alt + b
:移动到当前单词的词首。
上面快捷键的 Alt 键,也可以用 ESC 键代替。
清除屏幕
Ctrl + l
快捷键可以清除屏幕,即将当前行移到屏幕的第一行,与clear
命令作用相同。编辑操作
下面的快捷键可以编辑命令行内容。
Ctrl + d
:删除光标位置的字符(delete)。
Ctrl + w
:删除光标前面的单词。
Ctrl + t
:光标位置的字符与它前面一位的字符交换位置(transpose)。
Alt + t
:光标位置的词与它前面一位的词交换位置(transpose)。
Alt + l
:将光标位置至词尾转为小写(lowercase)。
Alt + u
:将光标位置至词尾转为大写(uppercase)。
使用
Ctrl + d
的时候,如果当前行没有任何字符,会导致退出当前 Shell,所以要小心。剪切和粘贴快捷键如下:
Ctrl + k
:剪切光标位置到行尾的文本。
Ctrl + u
:剪切光标位置到行首的文本。
Alt + d
:剪切光标位置到词尾的文本。
Alt + Backspace
:剪切光标位置到词首的文本。
Ctrl + y
:在光标位置粘贴文本。
同样地,Alt 键可以用 Esc 键代替。
自动补全
命令输入到一半的时候,可以按一下 Tab 键,Readline 会自动补全命令或路径。比如,输入
cle
,再按下 Tab 键,Bash 会自动将这个命令补全为clear
。如果符合条件的命令或路径有多个,就需要连续按两次 Tab 键,Bash 会提示所有符合条件的命令或路径。
除了命令或路径,Tab 还可以补全其他值。如果一个值以
$
开头,则按下 Tab 键会补全变量;如果以~
开头,则补全用户名;如果以@
开头,则补全主机名(hostname),主机名以列在/etc/hosts
文件里面的主机为准。自动补全相关的快捷键如下:
- Tab:完成自动补全。
Alt + ?
:列出可能的补全,与连按两次 Tab 键作用相同。
Alt + /
:尝试文件路径补全。
Ctrl + x /
:先按Ctrl + x
,再按/
,等同于Alt + ?
,列出可能的文件路径补全。
Alt + !
:命令补全。
Ctrl + x !
:先按Ctrl + x
,再按!
,等同于Alt + !
,命令补全。
Alt + ~
:用户名补全。
Ctrl + x ~
:先按Ctrl + x
,再按~
,等同于Alt + ~
,用户名补全。
Alt + $
:变量名补全。
Ctrl + x $
:先按Ctrl + x
,再按$
,等同于Alt + $
,变量名补全。
Alt + @
:主机名补全。
Ctrl + x @
:先按Ctrl + x
,再按@
,等同于Alt + @
,主机名补全。
Alt + *
:在命令行一次性插入所有可能的补全。
Alt + Tab
:尝试用.bash_history
里面以前执行命令,进行补全。
上面的
Alt
键也可以用 ESC 键代替。操作历史
Bash 会保留用户的操作历史。有了操作历史以后,就可以使用方向键的
↑
和↓
,快速浏览上一条和下一条命令。退出当前Shell时,Bash会将用户在当前Shell的操作历史写入
~/.bash_history
文件,默认储存500个操作。环境变量HISTFILE
指向这个文件:history
命令会输出这个文件的全部内容:输入命令时,按下
Ctrl + r
快捷键,就可以搜索操作历史,选择以前执行过的命令。这时键入命令的开头部分,Shell 就会自动在历史文件中,查询并显示最近一条匹配的结果,这时按下回车键,就会执行那条命令。下面的方法可以快速执行以前执行过的命令:
同理,
!echo
也会执行最近一条以echo
开头的命令。注:
!string
语法只会匹配命令,不会匹配参数。所以!echo H
不会执行echo Hello World
,而是会执行echo Goodbye
,并把参数H
附加在这条命令之后。同理,!echo H G
也是等同于echo Goodbye
命令之后附加H G
。由于
!string
语法会扩展成以前执行过的命令,所以含有!
的字符串放在双引号里面,如果后面有非空格的字符,就很有可能报错。history 命令
history
命令能显示操作历史,即.bash_history
文件的内容:使用该命令,而不是直接读取
.bash_history
文件的好处是,它会在所有的操作前加上行号,最近的操作在最后面,行号最大。通过定制环境变量
HISTTIMEFORMAT
,可以显示每个操作的时间:%F
相当于%Y - %m - %d
,%T
相当于%H : %M : %S
。只要设置
HISTTIMEFORMAT
这个环境变量,就会在.bash_history
文件保存命令的执行时间戳。如果不设置,就不会保存时间戳。环境变量
HISTSIZE
设置保存历史操作的数量:如果不希望保存本次操作的历史,可以设置
HISTSIZE
等于0。如果
HISTSIZE=0
写入用户主目录的~/.bashrc
文件,那么就不会保留该用户的操作历史。如果写入/etc/profile
,整个系统都不会保留操作历史。环境变量
HISTIGNORE
可以设置哪些命令不写入操作历史:如果想搜索某个以前执行的命令,可以配合
grep
命令搜索操作历史:操作历史的每一条记录都有编号。知道了命令的编号以后,可以用
感叹号 + 编号
执行该命令。执行.bash_history
里面的第8条命令:history
命令的-c
参数可以清除操作历史:相关快捷键
下面是一些与操作历史相关的快捷键。
Ctrl + p
:显示上一个命令,与向上箭头效果相同(previous)
Ctrl + n
:显示下一个命令,与向下箭头效果相同(next)
Alt + <
:显示第一个命令
Alt + >
:显示最后一个命令,即当前的命令
Ctrl + o
:执行历史文件里面的当前条目,并自动显示下一条命令。这对重复执行某个序列的命令很有帮助
感叹号
!
的快捷键如下:!!
:执行上一个命令
!n
:n
为数字,执行历史文件里面行号为n
的命令
!-n
:执行当前命令之前n
条的命令
!string
:执行最近一个以指定字符串string
开头的命令
!?string
:执行最近一条包含字符串string
的命令
!$
:代表上一个命令的最后一个参数
!*
:代表上一个命令的所有参数,即除了命令以外的所有部分
^string1^string2
:执行最近一条包含string1
的命令,将其替换成string
^string1^string2
的例子:如果希望确定是什么命令,然后再执行,可以打开
histverify
选项。这样的话,使用!
快捷键所产生的命令,会先打印出来,等到用户按下回车键后再执行。其他快捷键
Ctrl + j
:等同于回车键(LINEFEED)。
Ctrl + m
:等同于回车键(CARRIAGE RETURN)。
Ctrl + o
:等同于回车键,并展示操作历史的下一个命令。
Ctrl + v
:将下一个输入的特殊字符变成字面量,比如回车变成^M
。
Ctrl + [
:等同于 ESC。
Alt + .
:插入上一个命令的最后一个词。
Alt + _
:等同于Alt + .
。
Alt + .
快捷键,对于很长的文件路径,有时会非常方便。因为 Unix 命令的最后一个参数通常是文件路径。在
cd
命令后按下Alt + .
,就会自动插入foo_bar
。