如何在Git Bash的Shell脚本中调用CMD并向EXE传递输入?
Git Bash中运行Windows.exe调用工作流的解决方案
问题背景
你有一个自定义myprogram.exe,原Windows批处理通过(for %%i in (3 runs.txt) do @echo %%i)| myprogram.exe实现:先输出数字3,再读取runs.txt里的文件名列表,将这些内容通过管道传给exe完成计算。在Git Bash中手动输入cmd进入交互模式后执行命令再exit能正常工作,但写入bash脚本后仅启动cmd就停止,无法执行后续命令。
解决方案
方案1:通过cmd /c执行完整批处理命令
单独的cmd会启动交互式会话,脚本后续命令不会被传入会话执行。需要用cmd /c参数直接将批处理命令作为一次性任务执行:
cmd /c "(for %i in (3 runs.txt) do @echo %i)| myprogram.exe"
注意:这里用%i而非批处理里的%%i,因为cmd /c属于命令行模式,不是批文件模式
方案2:用Bash原生逻辑实现(更简洁)
完全避开cmd调用,直接用Bash命令组合出相同的输入流管道给exe:
{ echo 3; cat runs.txt; } | ./myprogram.exe
这个命令会先输出数字3,再读取runs.txt的所有内容,将两者合并后通过管道传递给myprogram.exe,效果和原批处理完全一致。
内容的提问来源于stack exchange,提问作者a11
相关产品推荐
相关产品推荐

