按下快捷键时如何在Shell中执行脚本


14

按下快捷键后,如何在Shell中执行脚本。

本质上,我需要的是当按下快捷键时,脚本应该从文件中读取并在终端中显示该内容。


我尝试了您使用的方法,bind '"\e[24~":"airmon-ng start wlan0\n"'但是在关闭终端后,事情似乎已重置并且所有热键都消失了

Answers:


20

您可以使用内置命令bind来映射键盘快捷键,以便它执行命令/ shell脚本。

假设我们要pwdF12按键时运行命令。

$ bind '"\e[24~":"pwd\n"'

现在,当我按F12提示输入时$

$ pwd
/home/saml

确定键盘快捷键

您可以使用以下技术来确定给定键盘快捷键的转义代码。在大多数系统上,按Ctrl+ V,释放,然后按要为其输入代码的键。还有其他一些系统可以M代替V

Ctrl+ V然后松开两CtrlV,最后按 F12在终端窗口返回此:

$ ^[[24~

这个输出可以解释如下,^[Esc关键。因此,当我们想使用bind命令指定此特定键时,我们需要使用a \e来表示该Esc键,然后是上面的所有其他内容。因此,bind命令如下所示:

$ bind '"\e[24~":"....."'

在中间执行命令

您还可以利用bind -x设置键盘快捷键,这些快捷键将在您在提示符下键入某些内容时运行命令,并且将显示这些命令的输出,但是您在提示符下键入的内容将保持不变。

$ bind -x '"\eW":"..."'

注意:此方法仅适用于输出1个字符的键盘快捷键,因此F12此处不起作用。

让我们给键盘快捷键Alt+ Shift+ 加上别名W

$ bind -x '"\eW":"who"'

假设我正在输入命令finger

$ finger

现在我打的键盘快捷键Alt+ Shift+ W

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

发生的事情bind是运行定义的命令who,获取其输出并将其插入到提示的前面。如果重复一遍,您会看到发生了什么,这是我打了2次的输出:

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

你的问题

因此,一个想法是使用bind -x上面的方法,并cat在您的提示下显示此文本文件:

$ bind -x '"\eW":"cat someinfo.txt"'

现在,当我运行命令时,可以看到如下文件:

This is text from some 
multi-line file reminding
me how to do some 
stuff
$ finger 

文件的输出someinfo.txt显示在我finger上面的命令上方。

参考文献


我只需要显示内容,而不必执行它。
user3539 2013年

因此,绑定到显示内容的脚本。
Lars Rohrbach 2013年

1
Ctrl + m对我不起作用。就像我刚刚按Enter一样。另一种我认为(我是一个新手的bash)是输入echo ' (单引号后的空间),然后按Ctrl + V,然后描述你想要的键,然后空格,单引号... 这里。示例:echo ' ^[OD '
aliteralmind 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.