如何从使用Windows find命令的cygwin bash执行bat文件

Mis*_*ble 37 cygwin batch-file

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
Run Code Online (Sandbox Code Playgroud)

我还有一个bat文件来启动我的构建,它使用windows find命令,它搜索匹配字符串的行(类似于gnu grep).

build.bat
...
dir | find "target"
if errorlevel = 1 goto no_target_dir
...
Run Code Online (Sandbox Code Playgroud)

现在,为了我的bash脚本工作,我需要/bin在路径之前c:\windows\system32.但是为了运行我的bat文件,我需要c:\windows\system32在路径之前/bin

一般来说,我们可能会声称所有bat文件都应该使用bash继承的原始环境执行,而不是修改后的环境.那有意义吗?

结束更新

这应该如何,但打破从bash执行的bat文件.解决这个问题的最佳方法是什么?

有没有办法强制Cygwin 使用它开始的环境执行bat文件(甚至所有 Windows可执行文件)?我在考虑start /icmd.exe 的行为.我正在考虑cygstart通过$PATH.bash_profile/中保存环境(或至少)来编写我自己的实用工具.bashrc.那有意义吗?

还有其他建议吗?

编辑:另请参阅启动新cmd.exe而不继承环境

rur*_*ban 31

如果chmod +x your.bat它有效.

./your.bat
Run Code Online (Sandbox Code Playgroud)

通过运行 cmd /c

已经回答为什么Cygwin可以运行.bat脚本?

  • 我怀疑你不明白我的问题的重点,那就是我需要在原始环境中执行bat文件,该文件已被更改 (2认同)

小智 5

我从这里测试了一个解决方案,它运行良好:

start "clean shell" /i "%windir%\explorer.exe" "\path\to\your\script.bat"
Run Code Online (Sandbox Code Playgroud)

to-run.bat 脚本:

echo %PATH%
echo "TODO: some commands"
cmd
Run Code Online (Sandbox Code Playgroud)

cygwinbash脚本,run-me.sh:

#!/bin/bash -e
set -x

SCRIPT_WINPATH=`cygpath --windows --absolute "$1"`
EXPLORER_CYGPATH=`which explorer`
EXPLORER_WINPATH=`cygpath --windows --absolute "${EXPLORER_CYGPATH}"`

cmd /C start "clean shell" /I "${EXPLORER_WINPATH}" "${SCRIPT_WINPATH}"
Run Code Online (Sandbox Code Playgroud)

测试:

chmod +x to-run.bat
chmod +x run-me.sh
./run-me.sh to-run.bat
Run Code Online (Sandbox Code Playgroud)