Powershell Перенаправление стандартного вывода в файл из git - bash .exe - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть очень простой c сценарий powershell, который использует Start-Process для запуска другого. sh сценарий, он работает, и сценарии действительно выполняются, но мне нужно иметь возможность захватить вывод вызываемого script.

Содержание скриптов ниже:

main.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 в своей консоли, но мне действительно нужен вывод либо go в окно консоли вызывающих скриптов powershell, либо в файл. Файл, указанный в параметре -RedirectStandardOutput, создан, но он пуст.

Как мне получить скрипт sh для стандартной печати в вызывающий скрипт?

Спасибо

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Как написано в подпункте sh, программа для запуска sh файлов - это / bin / bash, а не git - bash .exe.

$output = & 'C:\Program Files\Git\usr\bin\bash.exe' C:\test\sub.sh
$output
Hello World
1 голос
/ 30 апреля 2020

git - bash находится в другом мире, чем powershell, поэтому вы не можете напрямую перенаправить вывод или использовать -RedirectStandardOutput.

Как вы и предполагали, вы можете использовать временный файл, но хитрость заключается в том, чтобы используйте внутренний bash операнд ">" для перенаправления вывода в файл из bash процесса:

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

Затем вызовите его из powershell, вы также можете скрыть окно:

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 интерпретатора: { ссылка }

...