find
命令在Windows和Unix上的作用完全不同。在Windows上,它是类似于fgrep
的工具,用于列出文件中匹配的行;而在Unix上 - 以及在Cygwin上 - 它会列出符合某些条件的文件名。
Cygwin bash在当前路径之前添加了其标准目录,因此在bash内部,$PATH
通常为/bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS
。
开始更新以提供更多细节
例如,我有许多使用GNU find
命令的脚本 - 例如清除不包含文件的目录树的脚本:
purge-empty-dirs.sh
find . -depth -type d -empty | xargs rmdir -p
我还有一个批处理文件来启动我的构建,它使用Windows的find命令来搜索匹配某个字符串的行(类似于gnu grep
)。
build.bat
...
dir | find "target"
if errorlevel = 1 goto no_target_dir
...
为使我的bash脚本正常运行,需要在c:\windows\system32
之前将/bin
添加到路径中。但是为了使我的bat文件运行,需要将c:\windows\system32
添加到路径中/bin
之前。
一般来说,我们可能会认为所有的bat文件都应该在继承了bash的原始环境之后执行,而不是修改后的环境。这有意义吗?
更新结束
这种方法是正确的,但会破坏从bash执行的bat文件。如何解决这个问题呢?
是否有一种方式可以强制Cygwin使用它启动时的环境执行bat文件(甚至是所有 Windows可执行文件)?我正在考虑cmd.exe的start /i
行为。我正在考虑编写自己的类似于cygstart
的实用程序,并将环境(或至少$PATH
)保存在.bash_profile
/.bashrc
中。这有意义吗?
还有其他建议吗?
/bin
目录必须覆盖/cygdrive/c/Windows/Systems32
。 你只能编写一个批处理启动器,在执行cmd /c bat
前删除Cygwin路径。但这样做你会失去很多东西。最好重写你的批处理文件为shell脚本。批处理文件难以阅读和维护。 - rurban.bat
的输出导入到文本文件中? - jiggunjer./x.bat
:) - Taha Paksu