我已经在我的机器上安装了 Cygwin 并在我的 PATH 中设置了它的 bin 文件夹。
我可以在Windows命令提示符下使用所有Cygwin命令。
但是,我遇到的一个问题是,Cygwin 和 Windows 都有一个命令“
find
”。每当我使用 find
时,都会选择 Windows 版本。
我是否可以强制使用 Cygwin 版本的
find
而不是 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 变量找到的可执行文件。
1。检查 find.exe 文件的路径,您将获得 Windows 和 Cygwin 的路径,其中 Windows 是第一个 :
C:\Users\User>where is find
C:\Windows\System32\find.exe
C:\cygwin64\bin\find.exe
INFO: Could not find "is".
2。现在您将看到默认操作系统是什么:
`which find
C:\Windows\System32\find.exe`
**3.**使用此命令在 Windows 之前从 Cygwin 设置查找:
set PATH=C:\cygwin64\bin;%PATH%
4。您现在将看到一长串路径,您的路径应该是第一个
C:\Users\User\L>echo %PATH%
5。现在您可以做一个简短的测试,通过简单的查找命令检查它是否有效,例如:
`find . -type f -name *.txt`
如果该操作返回所有以 txt 结尾的文件,或者不返回任何内容(因为当前位置没有任何以 txt 结尾的文件),那么您成功了!如果您再次遇到该错误,请检查步骤。
这是因为 find 是 cmd 中内置的 shell,因此它甚至不会尝试遍历可执行文件搜索路径。
一般来说,Windows 无法理解 Cygwin 符号链接,但正如 https://cygwin.com/cygwin-ug-net/using.html#pathnames-symlinks 所解释的那样,在现代 Windows 版本中可以创建本机 Windows 符号链接在 NTFS 文件系统上,只要链接不跨文件系统即可。
我会考虑将其包装在例如放置在 Cygwin
/usr/local/bin
中的批处理脚本中,其名称类似于 cygfind.bat
(或任何你想称呼的名称),通过 find
显式调用 Cygwin 的 C:\path\to\find.exe
。
包装器方法的优点是,如果您升级 Cygwin 并且
find
已更新,包装它的批处理脚本仍然可以透明地工作。
我自己从未尝试过,但根据这个答案,您还可以使用特殊的
@doskey
变量来覆盖cmd内置命令。