大家好,欢迎来到IT知识分享网。
概述
简介
bind 是 Bash shell 的内置命令。您可以使用它来更改 bash 对在键盘上按下的键和键组合的响应方式。例如,我们按下 Ctrl+L 键,可以直接响应执行 clear 命令,而不是输入命令然后再回车执行。
通过这条命令,我们可以为一些常使用的命令设置按键或按键组合,即快捷键触发命令的方式,有效提高命令行中操作的效率。是很有用的一个命令。
bind 如何表示键
在使用 bind 命令之前,还得了解一些知识。如 bind 命令中如何表示键。
实际上,bind 使用特殊字符和文字字符串的方式来表示键盘键。其中特殊字符是:
| 特殊字符 | 说明 |
|---|---|
\C- |
表示按住 Ctrl 键,然后按破折号 - 后面的键。如 \C-A 表示按 Ctrl+A 键。 |
\e |
退出键。这用于其他绑定,例如元键(就是空格键旁边的键)。如 Alt 就是键盘上的元键。 |
我们可以通过运行 bind -P 命令来查看如何编码默认组合键:
如图我们可以看到 \C-l 表示清除屏幕,即我们可以按 Ctrl + L 快捷键来快速清屏,而不需要输入 clear 命令了。
同样,我们还可以查看文件 /etc/inputrc 中列出来的绑定配置:
对于不常见的按键组合,你可以使用 Ctrl + V 来查找任何键码,如下。
查找键码
查找键码是很有用的,能帮助我们确定按键的键码,然后写 bind 命令。如果不确定特定组合键的代码是什么(如 F7 的键码是什么),那么可以在 bash 下先按 Ctrl + V,然后再按组合键,这个操作被称为 quoted-insert,它会显示你按下的键的代码。例如,如果先按 Ctrl + V,再按 F7,将看到如下:
^[[18~
注意,这里的 ^[ 是一个转义字符,所以我们才可以使用这个字符串来表示这个键码:
\e[18~
如,我们先按 Ctrl + V,再按 Ctrl + D,结果会显示 ^D。
语法
bind 命令的基本格式是:bind [选项] [参数]。即:
bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function | readline-command]
其中各选项说明如下:
| 选项 | 说明 |
|---|---|
-m keymap |
在当前命令序列的持续时间内使用 keymap 作为键映射方案。键映射的可能值(即 -m 参数后面可以跟下面这些值)为:- emacs:即 Emacs 风格的键映射,这是默认设置;- emacs-standard:与 emacs 相同; – emacs-meta:与 emacs 相同,具有备用绑定; emacs-ctlx:”Ctrl-X”样式的 Emacs 绑定; – vi:Vi 风格的键映射;- vi-move:与 vi 相同;- vi-command:与 vi 相同;- vi-insert:与 vi 类似,但具有用于插入文本的备用键映射。 |
| -l | 列出所有可绑定编辑函数的名称,这些函数都是内置的。 |
| -P | 列出所有可绑定函数的名称,以及它们的绑定(如果有)。 |
| -p | 与 -P 相同,但以可用作 bind 命令输入的形式提供输出。 |
| -S | 列出调用宏的键序列及其值。 |
| -s | 与 -S 相同,但以可用作 bind 输入的形式提供输出。 |
| -V | 列出在 bash 键绑定中使用的变量及其值。 |
| -v | 与 -V 相同,但以可用作 bind 输入的形式提供输出。 |
| -q function-name | 查询显示编辑函数 function-name 的键绑定。 |
| -u function-name | 解除绑定到编辑函数 function-name 的所有键。 |
| -r keyseq | 删除键序列 keyseq 的所有绑定。 |
| -f filename | 从文件 filename 中读取键绑定,并将它们用作 bind 命令的输入。 |
| -x keyseq:shell-command | 为键绑定命令。当 bash 收到键盘序列 keyseq 时, shell 命令 shell-command 将会被执行。 |
| -X | 以适合输入到 bind 的形式列出所有由 -x 绑定的键序列。 |
使用
切换成 Vi 风格键映射
在bash中使用vi键映射,允许您像在 vi 中一样在命令行上操作文本。但我对 Vi 编辑器和 Emacs 编辑器都不熟,所以对这两种风格的切换具体有什么变化并不清楚。命令如下:
bind -m vi
列出所有可绑定的编辑函数
-l 选项会列出所有可绑定的编辑函数,这些函数都是内置的。命令如下:
bind -l
列出所有可绑定的编辑函数及绑定状态
-P 选项不仅列出了所有可绑定的编辑函数,还列出了它们的状态(是否已经被绑定)。命令如下:
bind -P
绑定文本到按键【★★★★】
可以将一段文本(如 "Hello World!")绑定到你键盘上的 F7 键(键码是 \e[18~)。当你按下 F7 键后,将在命令行中进行插入,就像你输入了这段文本一样。命令如下:
bind '"\e[18~":"Hello World!"'
注:冒号两边分别用双引号引起来,整个参数用单引号引起来。
绑定编辑函数
有那么多内置函数可以直接绑定使用。下面延时下绑定 kill-line 函数,该函数的作用是将所有文本从光标剪切到行尾。命令如下:
bind "\C-k":kill-line
我们为这个函数绑定的键是 Ctrl + K,即按下 Ctrl + K 之后,就会将命令行上的所有文本从光标剪切到行尾。
当然我们还可以绑定其他函数,如 kill-whole-line 等。还有 yank 函数效果也不错,可以粘贴最后被剪切的文本,和 kill-line 函数配合使用,我们把它绑定到 Ctrl + Y 组合键上。
bind "\C-y":yank
这样一个用于剪切,一个用于粘贴。
查看某编辑函数的绑定键
我们可以查看具体某个函数绑定了哪些键。如下:
# 语法 bind -q 函数名 # 比如我们查看 yank 函数绑定了哪些键 bind -q yank
移除键上的所有绑定
我们可以自己决定移除掉某个键或组合键上的所有绑定,无论绑定的是函数还是命令。基本格式如下:
# 语法 bind -r 键或组合键 # 示例,移除 Ctrl + Y 键上的所有绑定,选项是键码 bind -r "\C-y"
绑定命令【★★★★★】
该种用法应该是最常用的,也是最有用的,可以为任何按键绑定自己想要的命令。基本格式如下:
# 语法,键码可查看前文如何获取,命令指shell命令 bind -x '"键码":"命令"' # 示例 bind -x '"cc":"clear"'
在这里我为 C+C 组合键(即连续按两次键盘上的 C 键),就会自动执行 clear 命令,进行清屏操作。
当然我也可以为 Ctrl + L 按键绑定 ls -lh 命令,如:
bind -x '"\C-L":"ls -lh"'
绑定 shell 脚本【★★★★★】
其实就是绑定命令的使用,但单独拿出来说,是因为绑定脚本很有用,我们可以直接按某个快捷键就能启动 shell 脚本。基本语法如下:
# 语法,键码可查看前文如何获取,脚本是指脚本的绝对路径 bind -x '"键码":"脚本"' # 示例,restart.sh 是自定义的重启多台服务器的脚本 bind -x '"\C-R":"/root/.ssh/restart.sh"'
查看自定义已绑定命令
我们可以查看自己通过 bind -x 命令绑定了哪些命令。基本格式如下:
bind -X
如果遇到 执行bind -X命令报错“-bash: bind: -X: invalid option“ 可参考原因。
从文件读取键绑定
适用于配置多个键绑定,将键绑定存储在文件中,然后从文件读取配置。格式如下:
bind -f 文件
如果想要测试,可以执行 bind -p > mybinds 将所有键绑定输出到名为 mybinds 的文件,格式可用作bind的输入。例如,您可以在文本编辑器中打开mybinds并更改绑定,然后保存文件。然后,您可以使用下一个命令应用您的更改。
我自定义的文件似乎并没有达到效果。
配置文件
知道配置文件 /etc/inputrc 是必要的,该文件是默认的系统范围的键绑定配置文件。
因为上面使用 bind 命令的绑定只对本地会话(session)有效,如果结束本次会话,那么进行的绑定设置就也会结束。所以如果想要永久有效,那么必须把它配置在 /etc/inputrc 文件中。
注:在使用
/etc/inpurc配置文件时遇到一个问题,例如我要自定义绑定一个命令如:"\C-K": "date",即按快捷键Ctrl + K时打印当前系统日期,但是命令行却会输出"date"字符串,而非命令的执行结果。未解决。
参考资料:
- bind 命令详解
- Bash bind builtin command
- Why Ctrl-L is Not Clearing the Screen in Bash? How to Bind Keys in Linux?
- Linux bind命令
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110527.html










