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
我还有一个 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 可执行文件)?我正在考虑 cmd.exe 的 start/i
行为。我正在考虑编写自己的 cygstart 之类的实用程序来执行此操作,方法是将环境(或至少 $PATH
)保存在 .bash_profile
/中.bashrc
。那有意义吗?
还有其他建议吗?
最佳答案
关于batch-file - 如何从使用 Windows find 命令的 cygwin bash 执行 bat 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17582778/