web-dev-qa-db-ja.com

zsh apt-getオートコンプリートは偽のルートでは機能しません

職場では偽のルート環境を使用しています。基本的に、いくつかの環境変数が設定されている場合、apt-getおよびdpkgをエミュレートするディレクトリの束です。つまりapt-get install xxxを実行し、パッケージxxxをこの環境にインストールしますが、システムにはインストールしません。

Bashを使用したとき、apt-getオートコンプリートは完全に機能しました。 apt-get install <Tab><Tab>と入力すると、偽のルートにいた場合はローカルパッケージのリストが表示され、それ以外の場合はグローバルリストが表示されました。

ただし、zshに切り替えると、奇妙なことが起こりました。現在、グローバルパッケージのみがリストに表示されますが、常にそうであるとは限りませんでした。完全なストーリーはこちらです。

  1. Ubuntuをインストールし、偽のルートとzshをセットアップします。
  2. Ubuntuを最初から再インストールし、別のパーティションにある/homeを保存します。
  3. 現在、zsh autocomplete always env varsが設定されているかどうかにかかわらず、偽のルートからパッケージを表示します。
  4. Zshとzsh-commonを再インストールします。完了always偽のルートが存在しないので動作します。同時に、Ubuntuフォルダーを再インストールすると/usr/share/zsh/functions/Completionから消えたのに気付いたので、apt-get完了規則がDebianフォルダーから取得されます。

ここで何が起こるのか、そしてシステムと偽のapt-getの両方でzsh補完の動作を設定するにはどうすればよいですか?

Ubuntu 16.04.2を使用します。

追伸私の偽のルートはfakerootコマンドとは関係ありません。

1
Ivan Smirnov

さて、私はついにそれを理解しました。 Zsh補完エンジンは、aptによって返される利用可能なパッケージのリストなど、いくつかのものをキャッシュします。今、私の話は明らかです:オートコンプリートが常に偽ルートからパッケージを提案してきたのは、偽ルート環境で初めてzshを実行し、対応するパッケージリストがキャッシュに入れられたためです。

オーバーライドしたい場合(oh-my-zshを使用すると仮定)、oh-my-zshを呼び出す前に、次のコードを.zshrcに追加するだけです。

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

これにより、偽のルートとベースシステムの間で完了キャッシュが分離され、投稿か​​ら問題が解決されます。

1
Ivan Smirnov