2010-08-03 23 views
7

J'ai un script sh/bash qui doit appeler un fichier batch avec des paramètres (les paramètres sont des noms de fichiers et sont donnés au format DOS/Windows).Exécuter/invoquer le script batch Windows à partir du script sh ou bash

Fondamentalement, j'ai: script.sh

#!/bin/sh 
declare var1=$1 
declare var2=$2 
dosomething var1 var2 
... 
<invoke batch script> var1 var2 
... 
dosomethingelse 

J'utilise GNU bash, version 3.1.0(3)-release (i686-pc-msys) comme la coquille, sur msysgit

Le problème est que quand je lance à partir du script: $COMSPEC /c batchfile param1 param2 soit Je reçois une "invite vide" qui ressemble à bash, mais aucun résultat de commande n'est affiché sur la console, soit cmd.exe start, mais n'exécute pas le script.

J'ai essayé de citer les params bash comme ceci:

$COMSPEC /c \"batchfile param1 param2\" 
$COMSPEC /c \"\"batchfile param1 param2\"\" 
$COMSPEC /c \"\"batchfile \"param1\" \"param2\"\"\" 

Mais je n'ai pas de résultat.

+0

Appelez-vous un script batch Windows depuis un script Unix ou vice versa? J'ai été en mesure d'appeler un script de lot à partir du script shell avec – Raghuram

+0

J'appelle le lot de Windows de bash –

Répondre

10

Il semble que je devais échapper à l'espace de la cmd param:

$COMSPEC \/c batch-file\ \"$var1\"\ \"$var2\" 

ou

$COMSPEC /c batch-file\ \"$var1\"\ \"$var2\" 

Je ne suis pas sûr que la/de/c doit être échappé, mais cela fonctionne bien dans les deux sens échappé.

+0

Merci pour la documentation! J'ai eu des problèmes même pour trouver l'option/c, je n'avais même pas besoin d'arguments, je sais seulement comment démarrer le script depuis bash. Merci! –