我正在使用 Mac OS X,它附带了几个二进制文件,主要位于/usr/bin/
和中/usr/sbin/
。由于它没有像某些 Linux 发行版那样的本机包管理器,因此我习惯于管理自己的二进制文件,在/usr/local/<package_name>/
.
这样,我就可以从系统中完全删除包,但需要手动更新文件中的PATH
和变量。MANPATH
.bashrc
这是一个简单的例子:
Mac OS X 附带 ant 1.7.0,位于/usr/bin
.我需要使用最新版本,因此我从 Apache 下载它,然后将其解压缩(构建)到/usr/local/apache-ant-1.8.2
.然后我.bashrc
用以下内容更新我的文件:
# Mac OS X original PATH
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
# Apache Ant 1.8.2
PATH="$PATH:/usr/local/apache-ant-1.8.2/bin"
export PATH
我确保在之前导出/usr/bin/
和,因为除了我不想覆盖的之外,通常还有其他二进制文件。/usr/sbin/
ant/bin/
ant
问题是,当我输入时,which ant
我得到了/usr/bin/
.因此,我将其重命名/usr/bin/ant
为/usr/bin/ant-old
以便使用最新版本。
虽然这有效,但我想知道是否有更好的方法来替换系统二进制文件(主要是为了避免最后一次重命名)。
答案1
更换系统二进制文件应该是最后的手段。
我的建议是:
- 将和其他系统目录
/usr/local/bin
放在./usr/bin
PATH
- 建立
/usr/local/bin/ant
一个符号链接到/usr/local/apache-ant-1.8.2/bin/ant
. - 根本不要包含
/usr/local/apache-ant-1.8.2/bin
在其中。PATH
这边走:
- 您的自定义(在
/usr/local/bin
)会覆盖系统默认值。 - 符号链接
/usr/local/bin/ant
会提醒您从哪里获得该版本的ant
. - 如果您想使用默认设置测试某些内容,只需在测试期间将
/usr/local/bin
其从您的设置中删除即可。PATH
答案2
覆盖系统二进制文件的常用方法是将新的二进制文件安装在/usr/local/bin
(或sbin
) 中,然后确保它/usr/local/bin
位于/usr/bin
您的路径之前。
通常,您可以通过使用 配置包来实现这一点--prefix=/usr/local
,这会导致它们将二进制文件安装在 下,而不是为每个包/usr/local/bin
创建一个目录。/usr/local
您是说其中有/usr/local/apache-ant-1.8.2/bin
您不想使用的二进制文件吗?在这种情况下,我建议将其安装在下面(就像您现在所做的那样),但然后在其中/usr/local/apache-ant-1.8.2
创建符号链接(而不是放入您的路径)。/usr/local/bin
../apache-ant-1.8.2/bin/ant
/usr/local/apache-ant-1.8.2/bin