1. ホーム
  2. bash

[解決済み] bashで、ファンクションキーをコマンドにバインドするにはどうしたらいいですか?

2023-01-01 04:49:12

質問

例 私は F12 キーをコマンド echo "foobar" を押すたびに F12 を押すたびに、メッセージ "foobar" が画面に表示されるようにします。 理想的には、ビルトインだけでなく、任意のシェルコマンドを使用することができます。 どのようにこれを行うのでしょうか?

どのように解決するのですか?

キーから発せられる文字列は Ctrl - v をコマンドラインで実行し、関心のあるキーを押します。私のシステムでは F12 に対して、私は ^[[24~ . は ^[ エスケープ . 端末や端末エミュレータの種類によっては、同じキーに対して異なるコードを出力することができます。

Bash プロンプトで次のようなコマンドを入力すると、キーマクロを有効にすることができるので、試してみることができます。

bind '"\e[24~":"foobar"'

これで F12 を押すと、コマンド ライン上に "foobar" が表示され、さらに編集できるようになります。すぐにコマンドを入力するキーストロークが必要な場合は、改行を追加することができます。

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

これで F12 を押すことなく、カレントディレクトリが表示されるようになりました。 Enter . もし、すでに何かを入力している行で、自動的に実行されるこれを使ったらどうでしょうか?面倒なことになるかもしれない。しかし、マクロの一部として行をクリアすることができます。

bind '"\e[24~":"\C-k \C-upwd\n"'

スペースがあることで Ctrl - u は、ベルが鳴らないように削除するものがあります。

マクロが思い通りに動作するようになったら、マクロを ~/.inputrc ファイルに追加することで永続化できます。このとき bind コマンドも一重引用符の外側のセットも必要ありません。

"\e[24~":"\C-k \C-upwd\n"

編集します。

また、現在のコマンドラインを乱すことなく何かを実行するキーバインディングを作成することができます。

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

そして、例えばユーザー名を必要とするコマンドを入力している時に、ログインしているユーザー名を知る必要がある場合、そのユーザー名に対して Alt - Shift - W の出力と who の出力が表示され、プロンプトはあなたの部分的なコマンドをそのままに、カーソルが行の同じ位置にある状態で再発行されます。

残念ながら、これは次のようなキーでは正しく動作しません。 F12 のように、2文字以上を出力するキーでは正しく動作しません。場合によっては、これを回避することができます。

コマンド ( who は、プログラム、スクリプト、関数などの実行可能ファイルです。