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

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

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

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

答案1

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

例子

pwd假设我们要在按下该键时运行命令F12

$ 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++ ShiftW

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获取其输出并将其插入到提示符前面。如果你重复它,你就会看到发生了什么,这是我点击它两次的输出:

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命令上方。

参考

相关内容