Partage
  • Partager sur Facebook
  • Partager sur Twitter

Conversion fichier sh en bat

    6 décembre 2019 à 11:43:33

    Bonjour, 

    Je travaille d'ordinaire sous macos et je voudrais continuer chez moi mon projet qui se lance à l'aide de docker. Pour le lancer j'ai déjà un script fait pour sh et je voudrais le convertir en bat. J'ai commencé a regarder un tuto, mais je sens que je vais y passer l'aprem...

    J'aurais donc besoin d'une aide préciseuse pour transformer ce fichier: 

    #!/usr/bin/env sh
    
    machine='matcha-machine'
    
    if ! docker-machine status $machine > /dev/null 2>&1
    then
      docker-machine create \
      --virtualbox-boot2docker-url \
      https://github.com/boot2docker/boot2docker/releases/download/v18.06.0-ce/boot2docker.iso \
      $machine
    fi
    
    docker-machine start $machine
    eval $(docker-machine env $machine)
    server_ip=$(docker-machine ip matcha-machine)
    sed -i '' "s/REACT_APP_SERVER_IP=.*/REACT_APP_SERVER_IP=${server_ip}/" .env
    docker-compose up
    

    Je vous remercie par avance.

    • Partager sur Facebook
    • Partager sur Twitter
      7 décembre 2019 à 6:50:16

      Salut,
      Cela ressemble aux scripts sh que j'ai connu sur Unix. Je vais tenter d'en traduire des bouts:
      #!/usr/bin/env sh
      C'est le header du script sh?
      machine='matcha-machine'
      Je ne crois pas que cmd ferait cela. C'est associer le résultat d'une exécution à une variable.
      if ! docker-machine status $machine > /dev/null 2>&1
      if not exist docker-machine (
      Il n'y a pas de stderr (unité 2) dans cmd.
      Je suppose que status pourrait être remplacé par errorlevel
      then
      mettre ( sur la ligne du if
        docker-machine create \
        --virtualbox-boot2docker-url \
        https://github.com/boot2docker/boot2docker/releases/download/v18.06.0-ce/boot2docker.iso \
        %machine%
      Tu accummules les lignes comme sed le ferait?
      On pourrait peut-être remplacer par une suite de echo
      echo ... > truc.bat
      echo ... >> truc.bat
      Je ne sais pas comment cmd traiterais ton http
      fi
      )
      docker-machine start $machine
      eval $(docker-machine env $machine)
      ?? remplace les $var par %var%
      truc.bat     (exécutera les commandes accumulées dans le fichier truc.bat)
      truc     (le suffixe .bat n'est pas nécessaire)
      server_ip=$(docker-machine ip matcha-machine)
      Associer le résultat d'une exécution à un nom de variable? (pas sa valeur)
      sed -i '' "s/REACT_APP_SERVER_IP=.*/REACT_APP_SERVER_IP=${server_ip}/" .env
      À condition que sed soit installé sur ta machine. Pour le reste, ?
      On peut remplacer '' par ""
      Je ne sais pas si la commande suivant:
      s/\(REACT_APP_SERVER_IP=\).*/\1%{server_ip}%/ .env
      marcherait avec cmd. Ce qui est entre { } ne marcherait pas.
      docker-compose up
      ??
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        10 décembre 2019 à 4:04:55

        Salut,
        Il semble que l'éditeur du forum m'a joué un tour. Il n'aime pas que je tape \ suivi de ( ou ).
        Je vais remplacer le / par un : , c'est permis avec sed. Et je vais mettre / à la place de \ (pour le forum).
        sed -i "" "s:/(REACT_APP_SERVER_IP=/(.*:/1%{server_ip}%:" .env
        Je ne suis toujours pas convaincu que ça va marcher dans cmd.
        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          11 décembre 2019 à 16:58:33

          Bonjour, 

          Merci d'avoir pris le temps de répondre. Je me suis rendu compte que le script que j'ai peut etre simplifié. Car il est destiné à etre utilisé a l'école, endroit où nous ne sommes pas toujours au meme poste. Du coup les premieres lignes de verification si matcha-machine existe sont inutiles

          ce qui est utile: est: 

          machine='matcha-machine'
          
          docker-machine start $machine
          eval $(docker-machine env $machine)
          server_ip=$(docker-machine ip matcha-machine)
          sed -i '' "s/REACT_APP_SERVER_IP=.*/REACT_APP_SERVER_IP=${server_ip}/" .env
          docker-compose up

          J'ai regaré un peu et je me trouve avec un script commec ca qui ne marche pas entierement;

          docker-machine start matcha-machine
          $ docker-machine env matcha-machine | Invoke-Expression
          docker-compose up

          je n'ai pas encore regarder comment modifier l'ip dans la .env mais j'ai déjà une premiere erreur avec la seconde ligne:

          lorsque je fais la commande docker-machine env matcha-machine j'obtiens: 

          $Env:DOCKER_TLS_VERIFY = "1"
          $Env:DOCKER_HOST = "tcp://192.168.1.21:2376"
          $Env:DOCKER_CERT_PATH = "C:\Users\arago\.docker\machine\machines\matcha-machine"
          $Env:DOCKER_MACHINE_NAME = "matcha-machine"
          $Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true"
          # Run this command to configure your shell: 
          # & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env matcha-machine | Invoke-Expression

          Si j'ai bien compris, il veut que je fasse (pour simplifier):

          $ docker-machine env matcha-machine | Invoke-Expression

          lorsque je tape cette commande dans powershell tout a l'air de bien se passer (Je ne sais pas comment vérifier), mais dans le script bat cela ne marche pas, je reçois cette erreur:

          C:\Users\arago\Documents\42\matcha>docker-machine env matcha-machine   | Invoke-Expression
          'Invoke-Expression' n’est pas reconnu en tant que commande interne
          ou externe, un programme exécutable ou un fichier de commandes.

          Voilà où  j'en suis pour le moment :)


          • Partager sur Facebook
          • Partager sur Twitter
            11 décembre 2019 à 18:19:38

            Salut,
            Où se trouve Invoke-Expression? Est-il dans le chemin courant? Le chemin pour y accéder se trouve-t-il dans la variable d'environnement  Path ?
            Le message ne dit pas qu'il n'existe pas mais que  cmd  ne sait pas où le trouver.
            Est-ce un fichier de commandes ou un exécutable?
            Quel est son suffixe s'il en a un? .bat? .cmd? .exe? etc.?
            Tu parles à la fois de PowerShell et cmd. Je ne connais pas PowerShell.
            A tout hasard, je l'ai exécuté sur PowerShell (sans paramètre) et PS semble le reconnaître.
            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              13 décembre 2019 à 19:58:18

              Il n'est pas toujours possible d'écrire un programme en BAT mais avec un compilateur tu peux quand même le compiler. Cependant un programme en C# est peut-être plus approprié.

              • Partager sur Facebook
              • Partager sur Twitter

              Conversion fichier sh en bat

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown