Командная строка Windows захват вывода сценария bash в один шаг

у меня есть сценарий bash postCloneSetup.sh:

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

printf 'Updating submodules for projectrn'
git submodule update --init --recursive

printf 'rnInitializing git hooksn'
./GitHooks-BackEnd/init-hooks

printf 'rnInitializing Submodule1rn'
$(./Submodule1/postCloneSetup.sh)

printf 'rnInitializing Submodule2rn'
$(./Submodule2/postCloneSetup.sh)

я запускаю сценарий bash из командной строки Windows.

postCloneSetup.sh

Он открывает другое окно, а затем возвращается. Окно, которое оно породило, остается открытым и записывает выходной текст.

enter image description here

Я хочу захватить вывод из порожденного окна (текст, записанный на консоль) и вернуть его в командную строку Windows.

Я предпочел бы использовать что-то вроде

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

для командной строки Windows.

Я предпочел бы не изменять postCloneSetup.sh. Я знаю, что мог бы записать его в файл с

exec &> postCloneSetupLog.log

но тогда я должен ждать и вручную запустить

type postCloneSetupLog.log

чтобы увидеть вывод в консоли. Это невозможно для интеграции в движок CI, что является моей целью.

как я могу захватить вывод с порожденной консоли в одной команде?

5
задан Scott H
источник

2 ответов

короткий ответ:

использовать Git Bash и выполнить

  • "%ProgramFiles%\Git\bin\bash.exe" script_name.sh выполнить скрипт
  • "%ProgramFiles%\Git\bin\bash.exe" -c "echo 'it works'" запустить одну строчку

контекст:

я столкнулся с этим вопросом, когда искал решение для чего-то подобного. В нашей настройке мы используем Git Bash на Windows (в частности, на данный момент "GNU bash, версия 4.4.19 (1) - release (x86_64-pc-msys)") в качестве части среды разработки для Windows, у нас есть несколько скриптов, которые мы хотим протестировать через GitLab CI именно в этой среде: выполнить их под Git Bash, и посмотреть вывод в CI job.

то, что сработало для нас, чтобы выполнить "%ProgramFiles%\Git\bin\bash.exe" script_name.sh где "script_name.sh" это скрипт, который будет выполняться bash (или если вам нужно выполнить только встроенную команду "%ProgramFiles%\Git\bin\bash.exe" -c "echo 'it works'"). Выход этот скрипт виден в окне cmd, и попадает в плен к ИЦ работу.

может быть аналогичный результат может быть достигнут с подсистемой Windows для Linux, но поскольку Git Bash был нашим требованием, мы не исследовали, как это можно сделать с помощью WSL.

Итак, решение / обходной путь, который я хотел бы предложить из моего опыта, чтобы установить "Git для Windows"https://gitforwindows.org/ (Git Bash является его частью), и запустить bash скрипты через Git Bash, как описано выше.

стартер темы упомянул, что запуск скрипта из CI был именно его целью (цитата:but the other "script" is just running it from the Windows command prompt. In the CI engine that is what is happening,link), и это было нашей пользой случай, а также, поэтому я добавляю пример конфигурации работы 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
отвечен augur 2018-05-12 05:29:17
источник

Кажется, на ваш вопрос уже дан ответ. 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
0
отвечен jhamfler 2017-07-16 12:27:47
источник

Другие вопросы bash command-line linux shell windows