在 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 输出文件中的信息不会太多。