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'