職場では偽のルート環境を使用しています。基本的に、いくつかの環境変数が設定されている場合、apt-get
およびdpkg
をエミュレートするディレクトリの束です。つまりapt-get install xxx
を実行し、パッケージxxx
をこの環境にインストールしますが、システムにはインストールしません。
Bashを使用したとき、apt-getオートコンプリートは完全に機能しました。 apt-get install <Tab><Tab>
と入力すると、偽のルートにいた場合はローカルパッケージのリストが表示され、それ以外の場合はグローバルリストが表示されました。
ただし、zshに切り替えると、奇妙なことが起こりました。現在、グローバルパッケージのみがリストに表示されますが、常にそうであるとは限りませんでした。完全なストーリーはこちらです。
/home
を保存します。Ubuntu
フォルダーを再インストールすると/usr/share/zsh/functions/Completion
から消えたのに気付いたので、apt-get完了規則がDebian
フォルダーから取得されます。ここで何が起こるのか、そしてシステムと偽のapt-getの両方でzsh補完の動作を設定するにはどうすればよいですか?
Ubuntu 16.04.2を使用します。
追伸私の偽のルートはfakeroot
コマンドとは関係ありません。
さて、私はついにそれを理解しました。 Zsh補完エンジンは、aptによって返される利用可能なパッケージのリストなど、いくつかのものをキャッシュします。今、私の話は明らかです:オートコンプリートが常に偽ルートからパッケージを提案してきたのは、偽ルート環境で初めてzshを実行し、対応するパッケージリストがキャッシュに入れられたためです。
オーバーライドしたい場合(oh-my-zshを使用すると仮定)、oh-my-zshを呼び出す前に、次のコードを.zshrcに追加するだけです。
if [[ check for fakeroot ]]; then
export ZSH_CACHE_DIR=desired-cache-dir-name
fi
これにより、偽のルートとベースシステムの間で完了キャッシュが分離され、投稿から問題が解決されます。