バインディングを使用して現在のコマンドラインを読み込む

バインディングを使用して現在のコマンドラインを読み込む

bind -x特定のキーシーケンスを押したときにスクリプトを実行するために使用します。

/usr/local/bin/fooたとえば、次のようなスクリプトがあります。

#!/bin/bash
echo foo

を実行すると、bind -x '" ": /usr/local/bin/foo'スペースバーを2回押すたびに「foo」がエコーされます。今まではそんなに良くなった。

私が望むのは、現在入力されているコマンドにアクセス(好ましくは変更)することです。入力するとsome really long command(末尾に2つのスペースを含む)スクリプトが実行されます。しかし、入力した内容をどのように確認してsome really long commandに変更しますかsome other long command

ベストアンサー1

に基づいてこの回答私の意見では、スクリプトをソースbash関数に切り替えてREADLINE_LINEを変更し(そして新しい長さ/希望のカーソルポイントに基づいてREADLINE_POINTを変更します)bind -x '" " : that-function-name'

修正したい場合は明確にしてください。一部二重スペースを含むコマンドの場合は、次の操作を実行します。

autocomplete() {
if [ "$READLINE_LINE" = "some really long command" ]
then
    READLINE_LINE="some other long command"
    READLINE_POINT=23
fi
}

bind -x '"  " : autocomplete'

おすすめ記事