bash 자동 완성이 작동하지 않고 "완료"되지 않습니다.

bash 자동 완성이 작동하지 않고 "완료"되지 않습니다.

내 명령 bashrc.의 bash 완성은 scp다음과 같습니다

function _scp_complete
{
  COMPREPLY=""
  COMPREPLY+=( $(cat ~/.ssh_complete ) )
  COMPREPLY+=( $( find . ! -name . -prune -type f ) )
}
complete -F _scp_complete scp

아이디어는 누르면 scp [tab]현재 디렉토리의 모든 파일과 텍스트 파일에 나열된 단어가 표시된다는 것입니다 ~/.ssh_complete. 파일에 다음 항목이 포함되어 있다고 가정해 보겠습니다.

[email protected]
[email protected]

원하는 동작은 다음과 같습니다. scp alex@ [tab]시작할 수 있는 인수가 두 개뿐이므로 "autocomplete" 명령을 입력하고 탭 완성합니다(현재 작업 디렉터리에 이름이 비슷한 파일이 없다고 가정).scp [email protected].alex@

현재 구현에서 나타나는 동작은 다음과 같습니다. 입력을 하면 scp alex@ [tab]탭 완성이 아무것도 완료되지 않지만 명령 아래에 가능한 모든 인수가 나열됩니다.

원하는 동작을 어떻게 얻을 수 있습니까?

답변1

이것은 나에게 효과적입니다.

_foo() 
{
  local cur
  COMPREPLY=()
  cur=${COMP_WORDS[COMP_CWORD]}
  opts=""
  while read line           
  do           
    opts+=" $line"
  done < ~/.ssh_complete
  opts+=" "
  opts+=$(find . ! -name . -prune -type f)
  case "$cur" in
    *)
    COMPREPLY=( $( compgen -W '$opts' -- $cur ) );;
  esac

  return 0
}

complete -F _foo scp

관련 정보