bash 완료 함수 _known_hosts_real에 대해 ":"를 포함하는 프로토콜 접두사를 지정하는 방법

bash 완료 함수 _known_hosts_real에 대해 ":"를 포함하는 프로토콜 접두사를 지정하는 방법

"proto://host" 형식의 URL에 bash-completion을 사용하려고 합니다. ":"가 없으면 예상되는 동작을 볼 수 있지만 ":"가 있으면 URL에 "오류"가 발생합니다.

Bash 완성을 위한 호스트 이름 함수가 있는데, 여기에는 내가 사용하고 싶은 매개변수가 _known_hosts_real있습니다 .-p PREFIX

"잘못된" 동작을 재현하는 방법:

시스템에 "알려진" 호스트가 하나 이상 필요합니다.

예를 들어echo "gdns.google 8.8.8.8" >> /etc/hosts

기능의 예를 보려면 다음 명령을 실행하십시오.

$ unset COMPREPLY 
$ _known_hosts_real -p 'http//' -- "gdn"
$ echo $COMPREPLY 
http//gdns.google

작동하지 않는 예:

$ unset COMPREPLY 
$ _known_hosts_real -p 'http://' -- "gdn"
$ echo $COMPREPLY 
//gdns.google

유일한 차이점은 "http://"에 콜론이 추가된다는 점입니다. 여기서 문제는 접두사에 프로토콜 지정자와 콜론이 누락되어 있다는 것입니다. 이것이 예상되는 동작입니까?

답변1

이는 콜론으로 끝나는 접두사를 제거하는 예상 _known_hosts_real되는 동작입니다 . 알려진 호스트 파일과 함께 사용 하도록 고안되었으므로 아마도 .__ltrim_colon_completions_known_hosts_realsshcompgen -A hostname

답변2

@Michael_Veers는 이것이 예상되는 동작(+1)이라고 지적했으므로 내 함수를 직접 작성해야 합니다.

_known_hosts_real하지만 대신 추가 옵션을 활성화하기 위해 bashrc에 해당 표준에 대한 패치를 작성했습니다.

  • -t왼쪽 결장까지 다듬지 마십시오.
  • -S <suffix>맞춤 접미사 추가

존재하다 .bashrc:

 . <(type _known_hosts_real | sed -e '
 1d;s/acF:p:/actS:F:p:/;
 s/^.*c)/\nS)\nsuffix=$OPTARG\n;;\nt)\nnotrim=1\n;;\nc)/;
 s/\(__lt\)/[ $notrim ]||\1/')

이제 예상대로 작동합니다.

$ unset COMPREPLY
$ _known_hosts_real -p "scp://" -S '/' -t -a gdn
$ echo $COMPREPLY
scp://gdns.google/

관련 정보