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


14

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

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


私はあなたが使用した方法を試しましたbind '"\e[24~":"airmon-ng start wlan0\n"'が、ターミナルを閉じた後、事はリセットされるようで、すべてのホットキーは消えます

回答:


20

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

キー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その出力を取得してプロンプトの前に挿入することです。繰り返すと、何が起こっているのかがわかります。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コマンドの上に表示されています。

参照資料


内容を表示するだけで、実行する必要はありません。
user3539

そのため、コンテンツを表示するスクリプトにバインドします。
ラース・ローアバッハ

1
Ctrl + mが機能しません。Enterキーを押したように動作します。私は代替だと思うが(私はbashの初心者です)を入力することであるecho ' (単一引用符の後にスペースを)、その後、Ctrlキーを押しながら+ vをその後、説明するようにしたいキー、そしてスペース、単一引用符... ここに。例:echo ' ^[OD '
aliteralmind
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.