如何让 $PATH 始终包含 $(pwd)/sub_directory/.bin

如何让 $PATH 始终包含 $(pwd)/sub_directory/.bin

如果路径~/dev/project1/node_modules/.bin/ionic存在,并且我的工作目录是~/dev/project1,我希望能够仅键入 ionic 并按 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

相关内容