ショートカットキーが押されたときにシェルでスクリプトを実行するにはどうすればよいですか。
基本的に必要なのは、ショートカットキーが押されたときに、スクリプトがファイルから読み取り、そのコンテンツをターミナルに表示することです。
組み込みコマンドbind
を使用してキーボードショートカットをマッピングし、コマンド/シェルスクリプトを実行できます。
を押すと、コマンドpwd
を実行したいとします。 F12 キー。
$ bind '"\e[24~":"pwd\n"'
今私が押すと F12 私のプロンプトで、$
:
$ pwd
/home/saml
次の手法を使用して、特定のキーボードショートカットのエスケープコードを決定できます。ほとんどのシステムで Ctrl + V、放してから、コードを入力するキーを押します。それが動作するいくつかの他のシステムがあります M の代わりに V
押す Ctrl + V 次に両方を解放します Ctrl そして V そして最後に押します F12 端末ウィンドウでこれを返します:
$ ^[[24~
この出力は次のように解釈できます。^[
は Esc キー。したがって、bind
コマンドを使用してこの特定のキーを指定する場合は、\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
したがって、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
コマンドの上に表示されています。