Nous utilisons un faux environnement racine au travail. Fondamentalement, il s'agit d'un ensemble de répertoires qui émulent apt-get
et dpkg
si certaines variables d'environnement sont définies. C'est à dire. vous exécutez apt-get install xxx
et le package xxx
est en cours d'installation dans cet environnement, mais pas dans le système.
Quand j'ai utilisé bash, apt-get autocomplete a parfaitement fonctionné. Quand j'ai tapé apt-get install <Tab><Tab>
, il m'a montré la liste des paquets locaux si j'étais dans une fausse racine et la liste globale sinon.
Cependant, quand je suis passé à zsh, des choses étranges se sont produites. Actuellement, seuls les packages globaux apparaissent dans la liste, bien que ce ne soit pas toujours le cas. Voici l'histoire complète.
/home
qui se trouvait sur une partition séparée.Ubuntu
a disparu de /usr/share/zsh/functions/Completion
, les règles d’achèvement d’apt-get sont désormais prises à partir du dossier Debian
.Pourriez-vous s'il vous plaît m'expliquer ce qui pourrait se passer ici et comment puis-je configurer le travail d'achèvement de zsh avec à la fois system et fake apt-get?
J'utilise Ubuntu 16.04.2.
P.S. Ma fausse racine n'est pas liée à la commande fakeroot
.
Eh bien, j'ai finalement compris. Le moteur d'achèvement de Zsh met en cache plusieurs éléments, y compris la liste des paquets disponibles retournés par apt. Maintenant, mon récit semble clair: lorsque autocomplete me suggérait toujours des paquets de la fausse racine, c’était parce que, pour la première fois, j’exécutais zsh dans l’environnement de la fausse racine et que la liste de paquets correspondante était stockée dans un cache.
Si vous souhaitez le remplacer (en supposant que vous utilisiez oh-my-zsh), ajoutez simplement le code suivant dans votre .zshrc avant d'appeler oh-my-zsh:
if [[ check for fakeroot ]]; then
export ZSH_CACHE_DIR=desired-cache-dir-name
fi
Cela sépare la mise en cache d'achèvement entre la fausse racine et le système de base et résout le problème par la suite.