![bash 자동 완성이 작동하지 않고 "완료"되지 않습니다.](https://linux55.com/image/28682/bash%20%EC%9E%90%EB%8F%99%20%EC%99%84%EC%84%B1%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%22%EC%99%84%EB%A3%8C%22%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
내 명령 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