如何隐藏 $PATH 中的可执行文件?

如何隐藏 $PATH 中的可执行文件?

pipenv我的 s 中有 2 个不同版本$PATH

$ where pipenv
/usr/local/Caskroom/miniconda/base/bin/pipenv #1
/usr/local/bin/pipenv #2

我想隐藏pipenv#1,以便#2 可以优先,而

  • 保持/usr/local/Caskroom/miniconda/base/bin之前/usr/local/bin$PATH.
  • alias pipenv='/usr/local/bin/pipenv'
  • no running mv /usr/local/Caskroom/miniconda/base/bin/pipenv{,.bak}
    或者rm /usr/local/Caskroom/miniconda/base/bin/pipenv(将来pipenv升级时conda将在该位置再次安装pipenv),
    或者卸载pipenv#1(它是某些conda包的依赖项),
    或者类似的东西。

我怎么做?

答案1

将另一个目录(例如 )~/bin放在PATH.pipenv在该目录中创建一个指向您首选的符号链接。例如:

  • 将此行放入您的.profile
    PATH=~/bin:$PATH
    
  • 执行此操作一次:
    mkdir ~/bin
    ln -s /usr/local/bin/pipenv ~/bin
    

pipenv如果需要,您还可以选择动态调用哪个。 (例如,如果您的主目录在多台计算机之间共享,并且您希望pipenv在不同的计算机上有不同的首选目录,或者您想要一种方便的方式来选择您的首选目录pipenv。)如果您想这样做,而不是符号链接,创建一个包含如下内容的包装脚本并使其可执行 ( chmod +x ~/bin/pipenv)。

#!/bin/sh
if [ -x /usr/local/bin/pipenv ]; then
  pipenv=/usr/local/bin/pipenv
elif [ -x /usr/local/Caskroom/miniconda/base/bin/pipenv ]; then
  pipenv=/usr/local/Caskroom/miniconda/base/bin/pipenv
else
  pipenv=/usr/bin/pipenv
fi
exec $pipenv "$@"

相关内容