ショートカットキーが押されたときにシェルでスクリプトを実行するにはどうすればよいですか。
基本的に必要なのは、ショートカットキーが押されたときに、スクリプトがファイルから読み取り、そのコンテンツをターミナルに表示することです。
承認された回答:
組み込みコマンド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にしましょう +シフト + W 。
$ bind -x '"\eW":"who"'
コマンドfinger
を入力しているとしましょう :
$ finger
次に、キーボードショートカットの Altを押します。 +シフト + 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
の上に表示されています 上記のコマンド。
参考資料
- bashで、ファンクションキーをコマンドにバインドするにはどうすればよいですか?