탭 완성 가능성을 어떻게 파악할 수 있습니까?


18

콘솔에서 탭을 누르면이 출력이 나타납니다.

2957 개의 가능성을 모두 표시 하시겠습니까? (y 또는 n)

grep이러한 2957 가능성에 사용할 수있는 방법 이 있습니까? "svn"이라는 단어가있는 모든 명령을 검색하고 싶습니다.

답변:


21

해결책은 bash 내장 compgen입니다. 사용 가능한 모든 명령 및 명령 별칭에서 'svn'을 grep하려면 다음을 $PATH입력하십시오.

compgen -ac | grep svn

특정 접두사 (예 :로 시작하는 모든 명령 ecrypt)에서 검색 하시겠습니까? 정규식을 사용하십시오 . .

compgen -ac | grep "^ecrypt"

훌륭한 답변이지만 탭 완성 가능성을 그렙하려면 어떻게해야합니까? 그것은 항상 명령 이름뿐만 아니라 명령 매개 변수 등으로도 트리거되는 것은 아닙니다.
UncleZeiv


1

이것은 동등해야합니다.

for x in `echo $PATH | sed 's/:/ /g'`; do ls $x | grep svn; done

1
for i in $(echo $PATH | tr ":" "\n"); do find $i -type f -perm +111; done | grep svn

이 점을 제외하고 totaam의 답변과 매우 유사합니다 (Bash와 마찬가지로) 범위는 실행 파일로 제한됩니다. 그러나 JJE compgen는 또 다른 마일입니다.


1

{,.}*svn*여기 도움이 될 것입니다 ( 예 :) ls -l /usr/bin/{,.}*svn*<tab>.

그러나 Zsh를 살펴보십시오! 여기 : http://www.jukie.net/bart/blog/zsh-tab-completion 은 탭 완성 결과를 줄이는 데 도움이되는 훌륭한 예입니다. 여기에는 "foobar"라는 단어가없는 모든 탭 완성 결과를 원하거나 처음부터 숫자가 짝수 인 모든 결과, 하위 디렉토리 탭 완성 등을 포함한 부정도 포함됩니다. zsh로 변경 한 이유는 열려있는 모든 터미널간에 기록 공유였습니다.


0

나는 compgen을 몰랐고 제안했을 것입니다 :

ls -d ${PATH//:/\/*svn* } 2>/dev/null

bash.

${VAR//pattern/replace} replaces in VAR pattern with replace. // is used to replace every pattern, not just the first, which would be just /.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.