지정된 절대 디렉토리를 무시하기 위해 탭 완성을 사용하시겠습니까?

지정된 절대 디렉토리를 무시하기 위해 탭 완성을 사용하시겠습니까?

저는 많은 사용자가 있는 클러스터에서 작업하고 있습니다. 클러스터에는 첫 번째 문자가 내 사용자 이름과 동일한 사용자 50명이 있고, 마지막 문자까지 동일한 이름을 가진 사용자가 50명 있습니다. Tab 키에서 끝낼 때 문자를 더 입력할 필요 없이 Tab 키를 누른 다음 마지막 문자를 입력하면 됩니다 /home/e./home/elsherbini/

FigNORE는 절대 경로에서는 작동하지 않고 파일 접미사에서만 작동하는 것 같습니다. 탭으로 완성된 디렉토리 목록을 무시하는 방법이 있습니까?

GNU bash, 버전 4.1.2(1)-릴리스(x86_64-redhat-linux-gnu)

답변1

제가 제안하고 싶은 접근 방식 중 하나는 디렉토리 경로 alias에만 관심이 있다면 home디렉토리에 다음을 추가하는 것이 도움이 된다는 것입니다 profile. 생성한 고유 별칭은 첫 번째 문자에 대해서도 자동으로 수행되어야 합니다.

alias myHome="cd /home/elsherbini"
. .profile
my\T
pwd
/home/elsherbini

편집하다:

또 다른 방법은키 바인딩그러나 이것이 도움이 된다면 에서의 사용법을 고려하면 빠른 double click합계가 필요합니다 .right clickPuTTY

completeIt(){ echo "elsherbini"; }
bind -x '"\C-h": completeIt;'

Control-H사용자 이름과 같이 사용자 정의를 요청하는 문자열을 사용하십시오 . 용법:

$ cd
elsherbini

답변2

나는 zsh그것을 매우 철저하게 사용자 정의할 수 있도록 사용하고 있습니다. 이 옵션은 특정 모드가 완료되는 것을 방지합니다.

autoload -Uz compinit; compinit
# ignore some common patterns that we usually don't want as completions
zstyle ':completion:*' ignored-patterns "/usr/share/iscan" "/usr/lib/iscan" \
        "iscan" "/usr/lib/ispell" "ispell" "/usr/lib64" "/usr/lib32" \
        "/usr/libx32" "/usr/libexec" "/srv/tftp" "chkwins" "dpkg-buildflags"

답변3

내장 함수를 재정의하여 compgen간단한 디렉토리(예: cdls)를 완성할 수 있습니다. 예를 들어 이 함수를 ~/.bashrc에 넣으세요.

compgen(){
    local IFS=$'\n'
    local x tmp
    x=$( builtin compgen "$@" ) &&
    while read -r tmp; do
        [[ "$tmp" =~ ^/home/e && ! "$tmp" =~ ^/home/elsherbini$ ]] ||
        echo "$tmp"
    done <<< "$x"
}

내장 함수를 실행 하고 출력을 필터링하여 compgen가능한 완성 목록에서 ^/home/e일치하지 않는 정규식으로 시작하는 줄을 제거합니다. ^/home/elsherbini$정규 표현식은 에서 인용되지 않습니다 [[]].

관련 정보