Cygwin“find”未返回任何内容

Cygwin“find”未返回任何内容

在 Windows Server 2008 r2 上运行的 Cygwin 中,此命令不返回任何内容:

/usr/bin/查找/

我稍稍停顿了一下,但没有返回任何文本。没有错误,没有结果,等等。我尝试了不同的搜索路径,使用了参数(如 -type f),并将我的 cygwin 路径设置为 /usr/local/bin:/usr/bin。什么都没用。

有想法吗?

谢谢

答案1

这是非常奇怪的行为,我在使用 Cygwin 时从未遇到过类似的事情。我没有足够的声誉点数来使用评论询问信息,所以我只发布我将使用的调试技术。希望它们对遇到类似问题的其他任何人有用。

首先,我会尝试验证我是否运行了正确的可执行文件。运行后find --version应该返回类似以下内容:

查找(GNU findutils)4.5.11

由 Cygwin (4.5.11-1) 打包

如果我仍然没有得到任何输出,我会(安装并)使用 Cygwin 的strace 命令:

mkdir testdir
strace -o find.out find testdir
rmdir testdir

strace允许您查看 Cygwin 可执行文件对 Cygwin DLL 的调用。使用上述命令,find 命令的输出存储在 中 find.out

除非您熟悉 Windows 系统编程,否则其中的大部分内容都毫无意义。但是,查看输出仍会让您了解该命令正在做什么,例如,捕获传递给该命令的 Cygwin PATH 和其他环境变量。我通常会搜索以open( 查看命令 (find) 尝试使用哪些文件。对 open 函数的成功调用将显示如下:

open: open(/home/anthony/t, 0x30C000)
open: open(., 0x400000)

调用 open 失败会返回 -1 值。请注意,并非所有 find 尝试打开的文件都是命令正确运行所必需的。这是一个此类失败尝试的示例(locale.alias 如果存在,则会读取 中的信息,但 find 无需执行此操作):

open: -1 = open(/usr/local/share/locale/locale.alias, 0x8000), errno 2

注意:我创建(然后删除)了空testdir目录,因此捕获到 strace 输出文件中的信息不会太多。

相关内容