该find
命令在 Windows 和 Unix 中完全不同。在 Windows 上,它是一个类似fgrep
- 的实用程序,列出文件中的匹配行;在 Unix 和 Cygwin 上,它会列出符合某些条件的文件名。
Cygwin bash将其标准目录添加到当前路径,因此 bash 内部$PATH
通常是/bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS
.
开始更新以提供更多详细信息
例如,我有许多使用 gnufind
命令的脚本——例如用于清除不包含文件的目录树的脚本:
purge-empty-dirs.sh
find . -depth -type d -empty | xargs rmdir -p
我还有一个 bat 文件来开始我的构建,它使用 windows find 命令搜索与字符串匹配的行(类似于 gnu grep
)。
build.bat
...
dir | find "target"
if errorlevel = 1 goto no_target_dir
...
现在,为了让我的 bash 脚本工作,我需要/bin
在c:\windows\system32
. 但是要运行我的 bat 文件,我需要c:\windows\system32
先在路径中/bin
一般来说,我们可以声称所有 bat 文件都应该使用 bash 继承的原始环境执行,而不是修改后的环境。那有意义吗?
结束更新
这应该是这样,但会破坏从 bash 执行的 bat 文件。解决这个问题的最佳方法是什么?
有没有办法强制 Cygwin在它开始的环境中执行 bat 文件(甚至所有Windows 可执行文件)?我正在考虑start /i
cmd.exe 的行为。我正在考虑通过在/cygstart
中保存环境(或至少$PATH
)来编写我自己的类似实用程序来执行此操作。那有意义吗? .bash_profile
.bashrc
还有其他建议吗?
编辑:另见启动新的 cmd.exe 而不是继承环境