【问题标题】:How to use Cygwin version of find rather than Windows version如何使用 Cygwin 版本的 find 而不是 Windows 版本
【发布时间】:2019-10-23 02:15:51
【问题描述】:

我已经在我的机器上安装了 Cygwin,并在我的 PATH 中设置了它的 bin 文件夹。

我可以在 Windows 命令提示符下使用所有 Cygwin 命令。

但是,我遇到的一个问题是 Cygwin 和 Windows 都有一个命令“find”。每当我使用find 时,都会选择Windows 版本。

我是否可以强制使用find 的 Cygwin 版本而不是 Windows 版本?

【问题讨论】:

    标签: windows cmd cygwin


    【解决方案1】:

    确保 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 变量找到的可执行文件。

    【讨论】:

      【解决方案2】:

      这是因为 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 内置函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 2011-05-14
        • 2013-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-16
        相关资源
        最近更新 更多