bash readline: 外部コマンドに対するキーバインディングの実行

bash readline: 外部コマンドに対するキーバインディングの実行

(背景:私は長い間tcshを使用してきましたが、徐々にbashに切り替えて、便利なtcsh関連と同等の機能を見つけようとしています。)

tcshでは、外部コマンドを実行するキーバインディングを定義できます。たとえば、次のようになります。

bindkey -c ^Gu uptime

tcsh に「Control-G u」と入力するとuptimeコマンドが実行されます。 Enterを入力する必要はなく、コマンドが私の履歴に表示されず、入力行の途中で実行できます(一部のコマンドでは、後者が特に役に立つと思います)。

bash には GNU readline ライブラリを介した同様のキーバインディングメカニズムがあり、$HOME/.inputrcバインディングは(または他の場所で)指定されます。ただし、文書を読んだ後は、info readlineキーバインディングを使用して外部コマンドを実行する方法を見つけることができません。

私が考えることができる最も近いのは、私の.inputrcファイルに次のようなものを追加することです。

"\C-gu": "uptime\n"

しかし、これはコマンドを実行せずに、私が何かを入力してuptimeEnterを押したかのように動作します。コマンドは私の履歴に表示され(大丈夫です)、空白行でのみ機能します。コマンドを入力すると、コマンドを実行するのではなく"echo control-Gu"印刷されます。uptime

もう一つのマイナーな欠点は、バインディングがPerlデバッガなど、GNU readlineを使用する他のコマンドに影響を与えることです。

bindkey -cキーシーケンスを指定された外部コマンドの実行にマッピングしてbashでtcshの効果をシミュレートする方法はありますか?

重要な場合は、Ubuntu 12.04ベータ2でbash 4.2.24を使用しています。

ベストアンサー1

すべての行の編集がbash;で制御されるわけではありません。~/.inputrcこれらのほとんどはbind組み込みによって構成されています。この場合は、次のようなものが欲しい

bind -x '"\C-gu":uptime'

あなたの~/.bashrc

おすすめ記事