바인딩을 사용하여 현재 명령줄 읽기

바인딩을 사용하여 현재 명령줄 읽기

bind -x특정 키 시퀀스를 눌렀을 때 스크립트를 실행하는 데 사용합니다 .

/usr/local/bin/foo예를 들어 다음을 포함하는 스크립트 가 있습니다.

#!/bin/bash
echo foo

를 실행하면 bind -x '" ": /usr/local/bin/foo'스페이스바를 두 번 누를 때마다 "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'

관련 정보