$ PATHのバイナリを変更するビルドスクリプトがあります($ PATH自体は編集しませんが、すでに$ PATHにあるフォルダにファイルを追加/削除します)。 zshのオートコンプリートは、ビルドに応答して追加/削除されたファイルを反映するように更新されないため、シェルを再起動するか、組み込みの「rehash」シェルを実行してオートコンプリートキャッシュを更新するように指示する必要があります。
私は自動的に rehash を実行することにしました。
build() {
~/bin/real_build && rehash
}
ただし、シェル機能は独自のサブシェルで実行されるため、rehashは私が使用している端末のシェルではなくサブシェルのキャッシュを更新します。だから私はこれを次のように変更しました。
alias build='~/bin/real_build && rehash'
ビルドにパラメータを渡さない限り動作します。 「clean」を渡すと実行したいです。
~/bin/real_build clean && rehash
しかし、これを行います:
~/bin/real_build && rehash clean
だから詰まった。エイリアスは使用できますが、パラメータを渡すことはできません。関数を使用できますが、実際にオートコンプリート項目を更新することはできません。両方を操作する方法はありますか?
ベストアンサー1
通常の中括弧の代わりに関数本体の周りに括弧を使用しない限り、シェル関数は独自のサブシェルでは実行されません。あなたの関数は、私が見たすべてのzshバージョンで実行可能なハッシュを更新し、この動作を変更するオプションがないと思います。