$PATH に常に $(pwd)/sub_directory/.bin を含めるようにする方法

$PATH に常に $(pwd)/sub_directory/.bin を含めるようにする方法

パスが~/dev/project1/node_modules/.bin/ionic存在し、私の作業ディレクトリがある場合は、~/dev/project1ionicと入力してEnterキーを押すことができます。

これらのサブディレクトリはすべてPATHに含めることができますが、よりきれいな方法があるかどうか疑問に思います。私のパスには常に現在の作業ディレクトリに相対的なサブディレクトリが含まれるようにいくつかの魔法を追加したいと思います。

そのサブディレクトリのすべての親ディレクトリを検索してすべてのパスに追加できるようにする場合は、ボーナスポイントがあります。

答え1

検索パスに相対パスを配置できます。これは、プロジェクトの一部ではないディレクトリにあるときに予期しないバイナリを実行できる可能性があるため、危険です。マルチユーザーシステムではこれを実行しないでください。

PATH=…;node_modules/.bin/ionic;…

セキュリティと柔軟性を高めるために、現在のディレクトリが変更されるたびに検索パスを変更できます。あなたの.bashrc

cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
  if [[ $PATH = */node_modules/.bin/ionic ]]; then
    PATH=${PATH%:*}
  fi
  if [[ $PWD =~ ^"$HOME/dev/"[^/]* ]]; then
    project_root=${BASH_REMATCH[0]}
    PATH=$PATH:${project_root}/node_modules/.bin/inoic
  fi
}
chpwd

関連情報