在我的新 mac os/Darwin 系统上,我的find
工具是 11 年前的 BSD 版本。我已经使用 MacPorts 安装了更新的版本:GNU's find
,MacPorts 已将其命名为gfind
,并放置在/opt/local/bin/
.老化的 Apple 提供的设备find
仍保留在/usr/bin/find
.
我需要保留旧版本,find
以防系统仍使用它,但我更喜欢find
在命令行输入而不是gfind
.旧习惯和所有这些......
我知道我可以通过创建in (它在我的路径之前)或创建ingfind
来运行。这两个都工作得很好。我的问题是当我输入时如何获取- 我已经尝试了in的多个版本,但没有一个有效。find
link
/opt/local/bin/
/usr/bin
alias
.zshrc
man gfind
man find
alias
.zshrc
我该如何让它发挥作用?当我在命令行中输入时,如何进入man gfind
寻呼机显示?man find
答案1
如果您不需要原始查找页面 - 只需从find.1.gz
到建立链接gfind.1.gz
更好的方法是编辑 MANPATH 环境变量并将您自己的树(man1、man2 等)放入其中并替换手册页。
答案2
有一种简单而通用的方法可以将所有 GNU ('g-前缀') MacPorts 安装的工具,和它们的相关手册位于$PATH
本机工具前面:
➤ MacPorts 包管理器创建(并更新)一个包含符号链接的目录全部MacOS 上安装的 GNU 工具和手册;即“g-前缀”工具:
/opt/local/libexec/gnubin
有两个(或更多)子目录包含手册。这些目录中的所有文件都是符号链接GNU 工具和手册。例如:
lrwxr-xr-x 1 root admin 20 Dec 26 17:21 find -> /opt/local/bin/gfind
# under gnubin/man/man1 :
lrwxr-xr-x 1 root admin 36 Dec 26 17:21 find.1.gz -> /opt/local/share/man/man1/gfind.1.gz
如果我们检查manpath
:
% manpath
/opt/local/share/man:/usr/local/share/man: /* etc. etc */
➤ 所以我们看到,如果我们添加到 $PATH 中,则输入命令时/opt/local/libexec/gnubin
就会运行,输入时就会查看。可以通过在现有 PATH 前面添加来修改 PATH :gfind
find
man gfind
man find
gnubin
export PATH="/opt/local/libexec/gnubin:$PATH"
如果您对此感到满意,可以将其添加export
到您的~/.zprofile
.你就完成了。无需再重新训练您的手指来gfind
打字find
。
➤ 您还可以裁缝这很容易:
许多 GNU 工具被打包为一个“集合”,这意味着gfind
与其他几个工具一起打包在查找实用程序包- 包括glocate
。我对此很满意,直到我得知有一个顽固的错误由于 Darwin 和 Linux 之间的一些差异,这有效地禁用了它(从而变得无用)gupdatedb
。glocate
我偶尔会使用原生版本locate
,并希望避免在 GNU 版本上浪费更多时间。对此的“修复”是到unlink
的符号链接glocate
以及gupdate
来自 的相关手册/opt/local/libexec/gnubin
。
➤ 但还有一个纠结排序如果你“裁缝”格努宾:
我了解到 MacPorts 会定期更新 /opt/local/libexec/gnubin
,并且已被一位维护者告知这些更新将“维修”我的修改!这仅向解决方案添加了一个步骤:将原始gnubin
文件夹复制到另一位置;对该备用位置进行所有编辑unlink
并在 PATH 中使用它。操作方法如下:
% sudo cp -RPp /opt/local/libexec/gnubin/ /opt/local/libexec/gnubin-m
请注意,这是本国的,BSD版本cp
➤ 最终解决方案 - 编辑/取消链接 gnubin-m 并添加到 PATH
% sudo unlink /opt/local/libexec/gnubin-m/locate
% sudo unlink /opt/local/libexec/gnubin-m/man/man1/locate.1.gz
...
export PATH="/opt/local/libexec/gnubin-m:$PATH"