Windows 命令提示符一步捕获 Bash 脚本的输出

Windows 命令提示符一步捕获 Bash 脚本的输出

我有一个 bash 脚本 postCloneSetup.sh:

script_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
cd "$script_path"

printf 'Updating submodules for project\r\n'
git submodule update --init --recursive

printf '\r\nInitializing git hooks\n'
./GitHooks-BackEnd/init-hooks

printf '\r\nInitializing Submodule1\r\n'
$(./Submodule1/postCloneSetup.sh)

printf '\r\nInitializing Submodule2\r\n'
$(./Submodule2/postCloneSetup.sh)

我从 Windows 命令提示符触发一个 bash 脚本。

postCloneSetup.sh

它打开另一个窗口然后返回。它生成的窗口保持打开状态并记录输出文本。

在此处输入图片描述

我想捕获生成的窗口的输出(写入控制台的文本)并将其返回到 Windows 命令提示符。

我更喜欢使用类似

$(postCloneSetup.sh) // Linux for capturing output to current context

用于 Windows 命令提示符。

我宁愿不修改 postCloneSetup.sh。我知道我可以把它写入一个文件

exec &> postCloneSetupLog.log

但我必须等待并手动运行

type postCloneSetupLog.log

在控制台中查看输出。这对于集成到 CI 引擎来说是不可能的,而这正是我的目标。

如何通过一个命令捕获生成的控制台的输出?

答案1

简短回答:

要使用 Git Bash,请执行

  • "%ProgramFiles%\Git\bin\bash.exe" script_name.sh运行脚本
  • "%ProgramFiles%\Git\bin\bash.exe" -c "echo 'it works'"运行一行

背景:

我在寻找类似解决方案时遇到了这个问题。在我们的设置中,我们在 Windows 上使用 Git Bash(目前具体为“GNU bash,版本 4.4.19(1)-release (x86_64-pc-msys)”)作为 Windows 开发环境的一部分,我们有一些脚本想要通过 GitLab CI 在此环境中进行测试:在 Git Bash 下执行它们,并在 CI 作业中查看输出。

对我们有用的是执行"%ProgramFiles%\Git\bin\bash.exe" script_name.sh“script_name.sh”是一个由 bash 执行的脚本(或者如果您需要执行内联命令"%ProgramFiles%\Git\bin\bash.exe" -c "echo 'it works'")。此脚本的输出在 CMD 窗口中可见,并由 CI 作业捕获。

也许使用 Windows Subsystem for Linux 可以实现类似的结果,但由于我们的要求是 Git Bash,所以我们没有研究如何使用 WSL 来实现。

因此,根据我的经验,我建议的解决方案/解决方法是安装“Git For Windows”https://gitforwindows.org/(Git Bash 是其中的一部分),并按照上面所述通过 Git Bash 运行 bash 脚本。

主题发起者提到,从 CI 运行脚本正是他的目标(引述:but the other "script" is just running it from the Windows command prompt. In the CI engine that is what is happening关联),这也是我们的用例,所以我添加了一个 CI 作业配置示例(在我们的例子中是 GitLab CI,“.gitlab-ci.yml”)。正确转义所有文件以使其正常工作非常重要,我们犯了几个错误才正确完成:

test_on_windows:
  stage: test
  script:
    - "\"%ProgramFiles%/Git/bin/bash.exe\" script_name.sh"
    # or
    - "\"%ProgramFiles%/Git/bin/bash.exe\" -c \"echo 'it works'\""
  tags:
    - windows

答案2

看来您的问题已经得到解答了。https://stackoverflow.com/questions/2323292/windows-batch-assign-output-of-a-program-to-a-variable

我想你想要的是:

for /f %%i in ('application arg0 arg1') do set VAR=%%i

相关内容