bash가 완성한 모든 값을 반복합니다.

bash가 완성한 모든 값을 반복합니다.

고려하다:

$ ssh fo<tab>
foo  fool  football

이러한 값을 반복하려면 for 루프를 어떻게 작성해야 합니까?

#!/usr/bin/env bash
for SERVER in $(ssh fo<MAGIC HERE>) ; do echo $SERVER ; done

목록은 주기적으로 변경될 수 있으므로 값을 하드코딩하는 것은 옵션이 아닙니다. SSH의 특정 경우에는 호스트의 SSH 구성 파일과 일치하도록 grep할 수 있다는 것을 알고 있습니다. 그러나 다음과 같은 다른 완료 상황이 발생합니다.

$ git che<tab>
checkout      cherry        cherry-pick

답변은 이러한 다른 임시 완료에도 유용해야 합니다.

답변1

캠프겐아래와 같이 한 단어만 사용할 수 있습니다.

compgen -c git 

귀하의 사례에 맞는 맞춤형 솔루션은 다음과 같습니다.

먼저 bash-completion 스크립트를 얻은 다음 설정해야 합니다.비교하다_bash_completion*vars는 이 사용 사례를 충족한 다음 프로그래밍 방식으로 기본 함수 완료를 트리거합니다.기능COMPREPLY그런 다음 결과는 배열 로 수집됩니다 (예는 다음에서 가져옴).여기):

# load bash-completion helper functions
source /usr/share/bash-completion/bash_completion

# array of words in command line
COMP_WORDS=(git c)

# index of the word containing cursor position
COMP_CWORD=1

# command line
COMP_LINE='git c'

# index of cursor position
COMP_POINT=${#COMP_LINE}

# execute completion function
_xfunc git _git

# print completions to stdout
printf '%s\n' "${COMPREPLY[@]}"

추신: 명령 완료 중에 호출되는 정확한 함수를 확인하려면 다음을 사용하십시오.complete -p <command>

산출:

checkout
cherry
cherry-pick
clean
clone
column
commit
config
credential

이 콘텐츠의 전체 개요를 보려면 소유자 게시물을 방문하세요.여기

관련 정보