Eu trabalho em um cluster com muitos usuários. Existem 50 usuários no cluster com a mesma primeira letra do meu nome de usuário e um usuário que tem o mesmo nome até a última letra. Quando eu tabular, /home/e
gostaria de ver apenas /home/elsherbini/
, em vez de ter que digitar mais alguns caracteres, tabular e digitar o último.
Parece que o FIGNORE não funciona em caminhos absolutos, apenas em sufixos de arquivo. Existe uma maneira de ignorar uma lista selecionada de diretórios para preenchimento de guias?
GNU bash, versão 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Responder1
Uma maneira que eu sugiro é ter um, alias
se estivermos apenas preocupados com o home
caminho do diretório, adicionar o abaixo à sua profile
ajuda aqui, qualquer alias exclusivo que você criou deve ser preenchido automaticamente até mesmo com um primeiro caractere.
alias myHome="cd /home/elsherbini"
. .profile
my\T
pwd
/home/elsherbini
EDITAR:
A outra maneira poderia servinculando uma chavemas mesmo isso exigiria um rápido double click
e right click
, considerando seu uso PuTTY
, se isso ajudar.
completeIt(){ echo "elsherbini"; }
bind -x '"\C-h": completeIt;'
O uso de Control-H
solicitaria sua string personalizada, digamos, seu nome de usuário. Uso:
$ cd
elsherbini
Responder2
Estou usando zsh
o que permite que o preenchimento seja totalmente personalizado. Esta opção impede a conclusão de certos padrões:
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"
Responder3
Você pode substituir o built-in compgen
para conclusões simples de diretório (como para cd
e ls
). Por exemplo, coloque esta função em seu ~/.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"
}
Ele executa o builtin compgen
e filtra a saída para que quaisquer linhas que comecem com o regex ^/home/e
e não correspondam ^/home/elsherbini$
sejam removidas da lista de possíveis conclusões. Cuidado, as regexes não são citadas dentro de [[]]
.