从 Bash shell 脚本调用 CMD 并将输入传递给 EXE(使用 Git Bash for Windows)

问题描述 投票:0回答:0

我有一个执行计算的自定义

.exe
程序。它可以从 Windows 命令行手动运行,但为了提高效率,我创建了一个
.bat
文件。
.bat
文件在 Windows 命令行中启动
.exe
并通过管道输入。具体来说,它从
runs.txt
中读取 3 个文件的列表,并将列表中的每个文件传递给程序。然后程序从文件中读取信息,执行计算并保存输出。

我正在尝试将此工作流程转换为 bash,以便我可以使用 Git Bash 将其与其他工作流程一起运行。我不知道如何将管道语法转换为 bash。

文件夹结构:

myfolder
   |---- myprogram.exe
   |---- myshell.sh
   |---- mybatch.bat
   |---- runs.txt
   |---- RunA.csv
   |---- RunB.csv
   |---- RunC.csv

这是

mybatch.bat
的内容,当我从 Windows 命令行运行时它可以正常工作:

(for %%i in (3 runs.txt) do @echo %%i)| myprogram.exe

当我在 Git Bash 终端中使用

myfolder
作为
pwd
时,我可以运行以下命令并在终端运行:

cmd
(for %i in (3 runs.txt) do @echo %i)| myprogram.exe
exit

(请注意,从终端运行时使用 %i,从批处理运行时使用 %%i。) 我知道它正在工作,因为它打印了预期的输出并创建了预期的文件。

但是,当我尝试将其放入

myshell.sh
并从 Git Bash 终端运行
sh myshell.sh
时,什么也没有发生。
没有打印输出,也没有创建文件。但是,终端确实会切换到 Windows 命令行,所以我认为它只是在读取第一行 (
cmd
) 并停止。

myshell.sh
的内容:

cmd
(for %%i in (3 runs.txt) do @echo %%i)| myprogram.exe

(注意我也试过 %i;同样的问题)

如何让它继续到下一行,就像我在终端中手动输入命令一样? 寻找适用于 Git Bash 的解决方案;不使用其他 bash 模拟器。

windows batch-file cmd sh git-bash
© www.soinside.com 2019 - 2024. All rights reserved.