如何在按下快捷键时在 Shell 中执行脚本。
本质上我需要的是当按下快捷键时脚本应该从文件中读取并在终端中显示该内容。
答案1
您可以使用内置命令bind
来映射键盘快捷键,以便它执行命令/shell 脚本。
例子
pwd
假设我们要在按下该键时运行命令F12。
$ bind '"\e[24~":"pwd\n"'
现在,当我F12按提示时,$
:
$ pwd
/home/saml
确定键盘快捷键
您可以使用以下技术来确定给定键盘快捷键的转义代码。在大多数系统上,按Ctrl+ V,松开,然后按您想要代码的键。还有一些其他系统可以M代替它V
例子
按Ctrl+V然后松开两者Ctrl,V最后 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
获取其输出并将其插入到提示符前面。如果你重复它,你就会看到发生了什么,这是我点击它两次的输出:
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
命令上方。