特定のディレクトリに「cd」すると自動的にファイルをインポートする

特定のディレクトリに「cd」すると自動的にファイルをインポートする

私の要件に合わせて、すべてのディレクトリで十分に一般的ないくつかのユーティリティコマンドとエイリアスがあります。ただし、「build」などのカスタム動作が必要な特定のディレクトリがあります。

そのために、同じ名前の関数とエイリアスを変更して、このディレクトリに別のファイルを作成しました(新しい名前を覚えておく必要はありません)。

現在の特定のディレクトリにCDをコピーしたら、手動でファイルをインポートします。

source custom_aliases_n_fns

これはうまくいきますが、このファイルソースを自動化したいと思います。

ファイルソースを特定のディレクトリにCDに送信する方法はありますか?

注:システム全体のユーザーエイリアスを変更したくないので、このアプローチを使用しました。

ベストアンサー1

現在の作業ディレクトリが変更されるたびに呼び出される特別なフック関数をzsh使用できます。chpwd

custom_aliases_n_fns_already_sourced=false
chpwd() {
  if
    ! $custom_aliases_n_fns_already_sourced &&
      [[ $PWD = /some/dir && -f custom_aliases_n_fns ]]
  then
    source ./custom_aliases_n_fns
    custom_aliases_n_fns_already_sourced=true
  fi
}

盲目的に文書を購入することはお勧めできませんどのディレクトリ(したがって確認$PWD = /some/dir)は乱用される可能性があります。

独自のフックを変更することに加えて、chpwd次のこともできます。

myhook() {
  if
    [[ $PWD = /some/dir && -f custom_aliases_n_fns ]]
  then
    source ./custom_aliases_n_fns
    chpwd_functions[(Ie)$0]=() # remove ourselves from the array
  fi
}
chpwd_functions+=(myhook)

これにより、現在の作業ディレクトリが変更されたときに複数のフック関数を呼び出すことができます。ここでは、ファイルをインポートしたかどうかを記録するのではなく、ファイルをインポートchpwdした後にフックリストから関数を削除します。

おすすめ記事