web-dev-qa-db-ja.com

ショートカットキーが押されたときにシェルでスクリプトを実行する方法

ショートカットキーが押されたときにシェルでスクリプトを実行するにはどうすればよいですか。

基本的に必要なのは、ショートカットキーが押されたときに、スクリプトがファイルから読み取り、そのコンテンツをターミナルに表示することです。

14
user3539

組み込みコマンドbindを使用してキーボードショートカットをマッピングし、コマンド/シェルスクリプトを実行できます。

を押すと、コマンドpwdを実行したいとします。 F12 キー。

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

今私が押すと F12 私のプロンプトで、$

$ pwd
/home/saml

キーボードショートカットの決定

次の手法を使用して、特定のキーボードショートカットのエスケープコードを決定できます。ほとんどのシステムで CtrlV、放してから、コードを入力するキーを押します。それが動作するいくつかの他のシステムがあります M の代わりに V

押す CtrlV 次に両方を解放します Ctrl そして V そして最後に押します F12 端末ウィンドウでこれを返します:

$ ^[[24~

この出力は次のように解釈できます。^[は Esc キー。したがって、bindコマンドを使用してこの特定のキーを指定する場合は、\eを使用して Esc キーの後に上から他のすべてが続きます。したがって、bindコマンドは次のようになります。

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

途中でコマンドを実行する

bind -xを使用して、プロンプトで何かを入力している最中にコマンドを実行するキーボードショートカットを設定することもできます。これらのコマンドの出力が表示されますが、プロンプトはそのまま残ります。

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

注:このメソッドは、1文字を出力するキーボードショートカットでのみ機能するため、 F12 ここでは機能しません。

キーボードショートカットのエイリアスを作成しましょう AltShiftW

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

コマンドfingerを入力するとします。

$ finger

キーボードショートカットを押します AltShiftW

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

あなたの問題

したがって、1つのアイデアは、上記の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コマンドの上に表示されています。

参考文献

20
slm