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
我有一个非常基本的 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