我已经下载了find自制的GNU版本:
brew install findutils --with-default-names
Run Code Online (Sandbox Code Playgroud)
当我继续奔跑时which,find我得到了我的期望:
$ which find
/usr/local/bin/find
Run Code Online (Sandbox Code Playgroud)
但是,当我使用时find,系统会回退到OS X默认值/usr/bin/find,即:
$ find -exec file {} \;
find: illegal option -- e
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]
$ /usr/local/bin/find -exec file {} \;
.: directory
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我怎样才能find正常工作?
Sco*_*ive 10
brew自发布此问题以来已发生变化。之前接受的答案是不正确的 - 无论如何都不足以让某人遵循(重新启动不是答案) - 但现在包装brew和路径也发生了变化。为了保持此页面的相关性,这里是新答案。
这显示了 MacOS 提供的 find,它在系统 $PATH 中默认:
$ which find
/usr/bin/find
Run Code Online (Sandbox Code Playgroud)
这将安装 GNU find:
$ brew install findutils
Run Code Online (Sandbox Code Playgroud)
安装后,它不会触及 mac 版本,也不会假定您的路径中的默认值。这是为了防止出现意外。您可以在此处停止并且不进行其他配置,但是要以 GNU 版本为目标,您的脚本需要指定可执行文件的完整路径。
现在,将 GNUfind设为默认值(路径中的第一个),这意味着只需一个简单的命令即可调用它,您需要将 GNU find 的目录放在路径中的“第一个”目录中。在我的情况下管理 $PATH$HOME/.bash_profile但在某些系统上可能是$HOME/.bashrc.
PATH=$(brew --prefix)/opt/findutils/libexec/gnubin:$PATH
Run Code Online (Sandbox Code Playgroud)
^^ 您的默认 PATH 变量可能已经“领先”了其他东西。您可以将此逐字添加为新行,也可以小心地插入字符串(包括$和 使用:来与下一个值分开)
在打开的每个 shell 窗口中,重新加载您的 env:
$ source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
或者,关闭所有终端窗口。新的终端窗口将具有更新的 PATH 变量。不要重新启动。
现在检查您的find:
$ which find
/usr/local/opt/findutils/libexec/gnubin/find
Run Code Online (Sandbox Code Playgroud)
万岁,GNU 是默认的find。但是我们没有损害操作系统默认查找——它仍然存在,所以任何特定于 macOS 的脚本仍然会找到它:
$ ls /usr/bin/find
/usr/bin/find
Run Code Online (Sandbox Code Playgroud)
如果您遇到任何非 Apple 的 macOS 脚本,这些脚本严重假定“find”是 BSD 类型(Apple 的版本),但您首先在搜索路径中安装了 GNU find,那么您将遇到与 Brew 的兼容性问题。因为 BSD 'find' 有 GNU 'find' 没有的选项,反之亦然。很少有脚本假设您使用 BSD find,但如果您遇到这种情况:只需在该脚本的顶部添加一行以别名find为正确的,或者您可以操作$PATH以便find转到正确安装的命令实例,或者如果没有这听起来很容易,您可以编辑脚本,以便所有find命令实例都包含正确版本的完全限定路径。但是这一段的需要很少。:-)
请注意,该--with-default-names功能已被删除(但令人困惑的是,brew 网站仍然建议使用此选项)。对于任何现代 Brew 安装,尝试使用--with-default-names只会给您一条错误消息。事情发生了变化,不幸的是,由于不明原因,Brew 网站总是严重过时,
| 归档时间: |
|
| 查看次数: |
5070 次 |
| 最近记录: |