【发布时间】:2019-10-23 02:15:51
【问题描述】:
我已经在我的机器上安装了 Cygwin,并在我的 PATH 中设置了它的 bin 文件夹。
我可以在 Windows 命令提示符下使用所有 Cygwin 命令。
但是,我遇到的一个问题是 Cygwin 和 Windows 都有一个命令“find”。每当我使用find 时,都会选择Windows 版本。
我是否可以强制使用find 的 Cygwin 版本而不是 Windows 版本?
【问题讨论】:
我已经在我的机器上安装了 Cygwin,并在我的 PATH 中设置了它的 bin 文件夹。
我可以在 Windows 命令提示符下使用所有 Cygwin 命令。
但是,我遇到的一个问题是 Cygwin 和 Windows 都有一个命令“find”。每当我使用find 时,都会选择Windows 版本。
我是否可以强制使用find 的 Cygwin 版本而不是 Windows 版本?
【问题讨论】:
确保 cmd 和 bash shell 的 PATH 变量中的 cygwin 可执行文件文件夹 /usr/bin 位于 cmd 可执行文件文件夹 c:\Windows\system32 之前,以确保运行 cygwin 的 find 而不是 windows 的 find 命令。
在 cygwin shell 中使用 which -a find 列出通过 bash shell 的 PATH 变量找到的可执行文件。
在 cmd shell 中使用 where $PATH:find 列出通过 cmd shell 的 PATH 变量找到的可执行文件。
【讨论】:
这是因为 find 是 cmd 内置的 shell,所以它甚至不会尝试通过可执行搜索路径。
一般来说,Cygwin 符号链接不会被 Windows 理解,但正如 https://cygwin.com/cygwin-ug-net/using.html#pathnames-symlinks 所解释的那样,它在现代是可能的Windows 版本在 NTFS 文件系统上创建本机 Windows 符号链接,只要链接不跨文件系统。
我会考虑将其包装在一个批处理脚本中,例如,放置在 Cygwin /usr/local/bin 中,名称类似于 cygfind.bat(或任何你想称呼它的名称),通过 @987654325 显式调用 Cygwin 的 find @。
包装方法的优点是,如果您升级 Cygwin 并更新 find,包装它的批处理脚本仍然可以透明地工作。
我自己从未尝试过,但根据this answer,您也可以使用特殊的@doskey 变量来覆盖cmd 内置函数。
【讨论】: