기본적으로 scp를 둘러싼 래퍼인 간단한 bash 기능이 있습니다. 전화해서 이용하세요
copytomachine <Machine> <File>
간단한 자동 완성 설정이 있어서 입력할 때
copytomachine <TAB><TAB>
이는 사용 가능한 시스템 목록을 제공합니다. 현재 하드코딩된 시퀀스만 있으면 충분합니다.
내가 들어가면
copytomachine BUILD_SERVER <TAB><TAB>
디렉토리에 있는 파일 목록을 제공하고 해당 경로 등을 자동 완성할 수 있기를 원합니다. 그러나 첫 번째 매개변수(컴퓨터 이름)에 대해 이 파일 목록이 제공되는 것을 원하지 않습니다.
현재 완료 스크립트는 다음과 같습니다.
_machines_completions()
{
local opts
opts="BUILD_SERVER TEST_SERVER LOCAL_MACHINE"
COMPREPLY=( $(compgen -W "${opts}" -- ${COMP_WORDS[COMP_CWORD]}) )
return 0
}
매개변수 1에 정의된 컴퓨터 이름에 대해 탭 완성을 수행하고 매개변수 2에 있는 파일 이름에 대해 탭 완성을 수행할 수 있도록 이를 수정하는 방법을 알려주실 수 있는 분 계십니까?
답변1
COMP_CWORD
단어 번호이므로 해당 값을 테스트할 수 있습니다 .
_machines_completions()
{
local opts
opts="BUILD_SERVER TEST_SERVER LOCAL_MACHINE"
case $COMP_CWORD in
1)
COMPREPLY=( $(compgen -W "${opts}" -- "${COMP_WORDS[COMP_CWORD]}") )
;;
2)
COMPREPLY=( $(compgen -o default -- "${COMP_WORDS[COMP_CWORD]}") )
;;
esac
return 0
}
-o default
할 것이다:
compspec이 일치하는 항목을 생성하지 않으면 Readline의 기본 파일 이름 완성이 사용됩니다.
답변2
파일 이름에 대한 기본 완성 동작을 원하면 를 실행하십시오 compopt -o default
.
또 다른 대답은 COMPREPLY를 로 설정하는 것을 제안합니다 compgen -o default
. 이는 비슷하지만 정확히 동일한 동작은 아닙니다(차이점을 보려면 디렉터리 이름 자동 완성을 시도하십시오).