如何将包管理器安装的二进制文件设置为默认?

如何将包管理器安装的二进制文件设置为默认?

我通过 MacPorts 安装了较新版本tcpdump,并希望将其设为默认二进制文件。

$ which -a tcpdump
/usr/sbin/tcpdump
/opt/local/sbin/tcpdump

现在我设置了一个alias,但这当然不会妨碍man显示较旧的文档。

答案1

您需要调整您的变量PATHMANPATH环境变量,以将 MacPorts 路径列在供应商路径之前。对于,请在您的(或也可能)bash中尝试类似以下内容,然后重新加载正在运行的 shell:.bashrc.bash_profileexec bash

export MANPATH=/opt/local/share/man:$MANPATH

其他方便的命令可能是查看当前MANPATH是什么,并找到 MacPorts 隐藏手册页的所有可能位置(并非所有可能都是手册页目录,但正确的目录应该有man[0-9]子目录...):

echo $MANPATH
find /opt -type d -name man

PATH基本上是类似的:

export PATH=/opt/local/sbin:/opt/local/bin:$PATH

应该是最简单的选择,但同样,用exec bashand进行测试echo $PATH......

但请注意,Apple 有一个/usr/libexec/path_helper从全局 rc 文件运行的脚本 ( grep -l path_helper /etc/* 2>/dev/null)。您的定制必须发生该程序会更改PATHMANPATH,否则path_helper会将内容重置为 Apple 默认设置。输出path_helper可以用作起点:

/usr/libexec/path_helper -s >> ~/.bashrc

然后编辑附加的这些行,以按照您想要的顺序包含您想要的路径。 (不要像>那样使用破坏您的.bashrc文件>>正在附加...)

答案2

OS X 10.8.5,中bash 3.2.53(1)MacPorts 2.3.4您实际上不应该执行任何操作。

我不知道为什么它一开始不起作用。PATH的值可能以某种方式被存储并且没有更新(更多内容见下文)。

我试过

·MANPATH根据建议特里格,但这没有用。来自man的手册页:"It overrides the configuration file and the automatic search path".

·首先从我的(全局)配置文件中使用包管理器的目录exportPATH这给它们添加了三次前缀并添加了一次后缀,它确实将较新的二进制文件/手册页设置为默认值,但我对这个新的更长的组合感到好奇PATH(旧值仅将所有目录包含一次,但顺序不同,首先是操作系统的默认值,然后是包管理器)。

对于这个主题,请在 SU 上查看,OS X 10.6 Snow Leopard 中的 $PATH 是在哪里设置的?

事实证明MacPorts安装程序将目录添加到~/.profile.

# MacPorts Installer addition on 2015-10-10_at_20:55:20: adding an appropriate PATH variable for use with MacPorts.
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
# Finished adapting your PATH environment variable for use with MacPorts.

我遇到过很多次这样的情况,所以我对除了最后一个之外的所有内容进行了评论。这导致了一个干净的PATH.

但实际上如何man获取更新的文档呢?

从该SEARCH PATH FOR MANUAL PAGES部分:

In  addition,  for  each  directory in the command search path (we'll call it a "command
directory") for which you do not have a MANPATH_MAP statement, man automatically looks for
a manual page directory "nearby" namely as a subdirectory in the command directory itself or
in the parent directory of the command directory.

You can disable the automatic "nearby" searches by including a NOAUTOPATH statement in
/private/etc/man.conf.

我通过暂时启用 来证实这一点NOAUTOPATH

例子

$ type tcpdump
tcpdump is /opt/local/sbin/tcpdump

$ ll -d /opt/local/man
lrwxr-xr-x  1 root  admin  9 Oct 10 20:55:20 2015 /opt/local/man -> share/man

对于其他包管理器 YMMV,但我认为不多。

相关内容