zsh O autocomplete do apt-get não funciona com raiz falsa

1

Estamos usando um ambiente de raiz falso no trabalho. Basicamente, é um conjunto de diretórios que emulam apt-get e dpkg se algumas variáveis de ambiente estiverem definidas. Ou seja você executa apt-get install xxx e o pacote xxx está sendo instalado neste ambiente, mas não no sistema.

Quando usei o bash, o autocomplete do apt-get funcionou perfeitamente. Quando eu digitei apt-get install <Tab><Tab> , mostrei a lista de pacotes locais se eu estivesse em uma raiz falsa e a lista global de outra forma.

No entanto, quando mudei para o zsh, coisas estranhas aconteceram. Atualmente, apenas pacotes globais aparecem na lista, embora nem sempre tenha sido o caso. Aqui está a história completa.

  1. Eu instalei o Ubuntu e configurei o root e o zsh falso.
  2. Eu reinstalo o Ubuntu do zero, salvando /home , que estava em uma partição separada.
  3. Agora o preenchimento automático de zsh sempre mostra os pacotes da raiz falsa, independentemente de eu ter o conjunto de variáveis de env.
  4. Eu reinstalo o zsh e o zsh-common. Agora a conclusão sempre funciona porque não existe uma raiz falsa. No mesmo momento, percebo que depois de reinstalar a pasta Ubuntu desapareceu de /usr/share/zsh/functions/Completion , agora as regras de conclusão do apt-get são obtidas da pasta Debian .

Poderia, por favor, explicar-me o que poderia acontecer aqui e como posso configurar o zsh completion com o sistema e o falso apt-get?

Eu uso o Ubuntu 16.04.2.

P.S. Minha raiz falsa não está relacionada ao comando fakeroot .

    
por Ivan Smirnov 30.07.2017 / 04:12

1 resposta

1

Bem, finalmente descobri. O mecanismo de conclusão do Zsh armazena várias coisas em cache, incluindo a lista de pacotes disponíveis retornados pelo apt. Agora minha história parece clara: quando o autocomplete sempre me sugeria pacotes a partir do root falso, foi pela primeira vez que executei zsh no ambiente de raiz falso e a lista de pacotes correspondente entrou em um cache.

Se você quiser sobrescrevê-lo (supondo que você use oh-my-zsh) apenas adicione o seguinte código em seu .zshrc antes de chamar oh-my-zsh:

if [[ check for fakeroot ]]; then
  export ZSH_CACHE_DIR=desired-cache-dir-name
fi

Isso separa o cache de conclusão entre a raiz falsa e o sistema básico e resolve o problema da postagem.

    
por Ivan Smirnov 31.07.2017 / 08:19