저는 많은 사용자가 있는 클러스터에서 작업합니다. 클러스터에는 내 사용자 이름과 첫 글자가 같은 사용자가 50명 있고, 마지막 글자까지 이름이 같은 사용자가 50명 있습니다. 탭을 완료하면 문자를 몇 개 더 입력하는 대신 탭을 누른 다음 마지막 문자를 입력하는 것보다 /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 click
PuTTY
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
의 경우 ). 예를 들어, 이 함수를 ~/.bashrc에 넣으세요.cd
ls
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$
가능한 완성 목록에서 제거되도록 합니다. 정규식은 내부에서 인용되지 않습니다 [[]]
.