我通过 MacPorts 安装了较新版本tcpdump
,并希望将其设为默认二进制文件。
$ which -a tcpdump
/usr/sbin/tcpdump
/opt/local/sbin/tcpdump
现在我设置了一个alias
,但这当然不会妨碍man
显示较旧的文档。
答案1
您需要调整您的变量PATH
和MANPATH
环境变量,以将 MacPorts 路径列在供应商路径之前。对于,请在您的(或也可能)bash
中尝试类似以下内容,然后重新加载正在运行的 shell:.bashrc
.bash_profile
exec 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 bash
and进行测试echo $PATH
......
但请注意,Apple 有一个/usr/libexec/path_helper
从全局 rc 文件运行的脚本 ( grep -l path_helper /etc/* 2>/dev/null
)。您的定制必须发生后该程序会更改PATH
和MANPATH
,否则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"
.
·首先从我的(全局)配置文件中使用包管理器的目录export
。PATH
这给它们添加了三次前缀并添加了一次后缀,它确实将较新的二进制文件/手册页设置为默认值,但我对这个新的更长的组合感到好奇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,但我认为不多。