Bash

按下快捷鍵時如何在shell中執行腳本

  • May 4, 2017

按下快捷鍵時,如何在 Shell 中執行腳本。

基本上我需要的是當按下快捷鍵時,腳本應該從文件中讀取並在終端中顯示該內容。

您可以使用內置命令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,獲取其輸出並將其插入到提示符前面。如果你重複它,你會看到發生了什麼,這是我擊中它 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命令上方。

參考

引用自:https://unix.stackexchange.com/questions/89622