Powershell 将标准输出从 git-bash.exe 重定向到文件

Powershell Redirecting standard output to file from git-bash.exe

我有一个非常基本的 powershell 脚本,它使用 Start-Process 来启动另一个 .sh 脚本,这是有效的并且脚本确实执行了,但我需要的是能够捕获被调用脚本的输出.

脚本内容如下:

主.ps1

Start-Process 'C:\Program Files\Git\git-bash.exe' -ArgumentList '-- C:\test\sub.sh' -Wait -RedirectStandardOutput output.txt

sub.sh

#!/bin/bash
echo "Hello World"

sub.sh 在其自己的控制台中启动并打印出 Hello World,但我确实需要将输出转到调用 powershell 脚本控制台 window 或文件.我在 -RedirectStandardOutput 参数中指定的文件已创建,但为空。

如何让 sh 脚本打印到调用脚本的标准输出?

谢谢

git-bash 与 powershell 处于不同的世界,因此您不能直接重定向输出或使用 -RedirectStandardOutput。

如您所料,您可以使用临时文件,但技巧是使用内部 bash 操作数“>”将输出重定向到来自 bash 进程的文件:

#!/bin/bash
echo "Hello from bash World" > /c/test/tempFile.txt

然后从 powershell 调用它,您可能还会隐藏 window :

Start-Process 'C:\Program Files\Git\git-bash.exe' -ArgumentList C:\test\sub.sh -Wait -WindowStyle Hidden

$s = Get-Content c:\test\tempFile.txt
Write-Host "s=$s"
Remove-Item c:\test\tempFile.txt

注意:您必须指定完全限定路径。

另一个选项可能是使用 Windows 10 个自己的 bash 解释器:

如sub.sh中所写,执行sh文件的程序是/bin/bash,而不是git-bash.exe.

$output = & 'C:\Program Files\Git\usr\bin\bash.exe' C:\test\sub.sh
$output
Hello World