Question Invite de commande Windows capturer la sortie du script bash en une seule étape


J'ai un script 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)

Je déclenche un script bash depuis l'invite de commande Windows.

postCloneSetup.sh

Il ouvre une autre fenêtre puis revient. La fenêtre générée reste ouverte et enregistre le texte de sortie.

enter image description here

Je souhaite capturer le résultat de la fenêtre générée (le texte écrit sur la console) et le renvoyer à l'invite de commande Windows.

Je préférerais utiliser quelque chose comme

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

pour l'invite de commande Windows.

Je préfère ne pas modifier postCloneSetup.sh. Je sais que je pourrais l'avoir écrire dans un fichier avec

exec &> postCloneSetupLog.log

mais alors je dois attendre et exécuter manuellement

type postCloneSetupLog.log

pour voir la sortie dans la console. Cela n'est pas possible pour l'intégration dans un moteur CI, ce qui est mon objectif.

Comment puis-je capturer la sortie de la console générée en une seule commande?


4
2018-06-13 19:33


origine


S'il vous plaît modifier la question et inclure la Contenu des deux scripts. - DavidPostill♦
@DavidPostill J'ai ajouté le contenu de postCloneSetup.sh, mais l'autre "script" l'exécute juste depuis l'invite de commande Windows. Dans le moteur CI, c'est ce qui se passe. - Scott H
La petite fenêtre semble être du programme 'git for windows'. Voir la redirection de commande :: en.wikipedia.org/wiki/Redirection_(computing) - Biswapriyo
Veuillez expliquer exactement ce que vous entendez par "Je veux capturer la sortie de la fenêtre générée et la renvoyer à l'invite de commande Windows". Ne répondez pas aux commentaires; modifier votre question pour la rendre plus claire et plus complète. - G-Man


Réponses:


Réponse courte:

Pour utiliser Git Bash et exécuter

  • "%ProgramFiles%\Git\bin\bash.exe" script_name.sh exécuter un script
  • "%ProgramFiles%\Git\bin\bash.exe" -c "echo 'it works'" courir bon mot

Un contexte:

Je suis tombé sur cette question en cherchant une solution pour quelque chose de similaire. Dans notre configuration, nous utilisons Git Bash sous Windows (en particulier pour le moment "GNU bash, version 4.4.19 (1) -release (x86_64-pc-msys)") que nous voulons tester via GitLab CI exactement dans cet environnement: pour les exécuter sous Git Bash, et voir la sortie dans le job CI.

Ce qui a fonctionné pour nous est d'exécuter "%ProgramFiles%\Git\bin\bash.exe" script_name.sh où "script_name.sh" est un script à exécuter par bash (ou si vous devez simplement exécuter une commande en ligne) "%ProgramFiles%\Git\bin\bash.exe" -c "echo 'it works'"). Une sortie de ce script est visible dans la fenêtre CMD et est capturée par le travail CI.

Peut-être un résultat similaire peut-il être obtenu avec Windows Subsystem pour Linux, mais comme Git Bash était notre exigence, nous n’avons pas étudié comment cela pourrait être fait avec WSL.

Donc, une solution / solution de contournement que je proposerais de mon expérience est d'installer "Git For Windows" https://gitforwindows.org/ (Git Bash en fait partie) et exécutez les scripts bash via Git Bash comme décrit ci-dessus.

Topic Starter a mentionné que l'exécution d'un script de CI était exactement son objectif (citation: but the other "script" is just running it from the Windows command prompt. In the CI engine that is what is happening, lien), et c’était notre cas d’utilisation, alors j’ajoute un exemple de configuration de travail CI (GitLab CI dans notre cas, ".gitlab-ci.yml"). Il est important de faire en sorte que tout fonctionne correctement, et il nous a fallu quelques erreurs pour le faire correctement:

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
2018-05-09 19:53





Il semble que votre question a déjà reçu une réponse. https://stackoverflow.com/questions/2323292/windows-batch-assign-output-of-a-program-to-a-variable

Je pense que tu veux ça:

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

0
2017-07-16 12:27