내 명령 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