Lancement script .sh au travers d'un .bat
Ben
-
zipe31 Messages postés 38797 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 38797 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Voici ma problématique :
Je souhaite lancé un script shell via un bouton excel VBA. Pour ce faire j'ai créé un .bat qui me sert de passerelle entre le vba et le shell.
1ère question : est il exacte qu'on ne peut lancer de .sh en vba ?
Pour ce faire j'ai écris le script suivant:
-------------------------- batch script --------------------------
@echo off
setlocal ENABLEDELAYEDEXPANSION
cd "%CygwinPATH%"
set CygwinPATH-UNIX=%CygwinPATH:\=/%
set CygwinPATH-UNIX=/cygdrive/%CygwinPATH-UNIX::=%
echo %CygwinPATH-UNIX%
echo ---------------- DEBUT DU PROGRAMME SHELL ----------------
echo %CygwinPATH-UNIX%/ESSP_RIMS_MacroInd_Processing.sh | cygwin
echo ----------------- FIN DU PROGRAMME SHELL -----------------
EndLocal
-------------------------- End of batch script --------------------------
la commande qui me sert à envoyer mon script shell sur l'émulateur shell CygWin est la suivante:
echo %CygwinPATH-UNIX%/ESSP_RIMS_MacroInd_Processing.sh | cygwin
cela marche cependant j'ai un problème avec la fonction "read" de shell (ou avec une autre partie du code :) ): quand je fais une demande à l'utilisateur dans mon script shell via "READ", il n'a jamais la main pour rentrer les infos car le script tourne en permanence comme si le batch répond au shell. Ci dessous le script shell et le rendu :
-------------------------- Shellscript --------------------------
if [ -e File ]
then
echo FILE WILL BE OVERWRITTEN
echo OVERWRITTE FILE ? - YES / NO
read UserAnswer
########### NEITHER YES OR NO ANSWERS ###########
while [ "$UserAnswer" != "YES" ] && [ "$UserAnswer" != "NO" ]
do
echo ANSWER NOT UNDERSTOOD
read UserAnswer
done
############
########### YES ANSWER ###########
if [ "$UserAnswer" == "YES" ]
then
ACTIONS
fi
###########
########### NO ANSWER ###########
if [ "$UserAnswer" == "NO" ]
then
echo ----- FILE HAS NOT BEEN OVERWRITTEN -----
fi
###########
else
ACTIONS
fi
-------------------------- End of Schell script --------------------------
-------------------------- console DOS --------------------------
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
etc
Est que vous auriez une idée sur le pourquoi de ce comportement svp ?
Merci
Voici ma problématique :
Je souhaite lancé un script shell via un bouton excel VBA. Pour ce faire j'ai créé un .bat qui me sert de passerelle entre le vba et le shell.
1ère question : est il exacte qu'on ne peut lancer de .sh en vba ?
Pour ce faire j'ai écris le script suivant:
-------------------------- batch script --------------------------
@echo off
setlocal ENABLEDELAYEDEXPANSION
cd "%CygwinPATH%"
set CygwinPATH-UNIX=%CygwinPATH:\=/%
set CygwinPATH-UNIX=/cygdrive/%CygwinPATH-UNIX::=%
echo %CygwinPATH-UNIX%
echo ---------------- DEBUT DU PROGRAMME SHELL ----------------
echo %CygwinPATH-UNIX%/ESSP_RIMS_MacroInd_Processing.sh | cygwin
echo ----------------- FIN DU PROGRAMME SHELL -----------------
EndLocal
-------------------------- End of batch script --------------------------
la commande qui me sert à envoyer mon script shell sur l'émulateur shell CygWin est la suivante:
echo %CygwinPATH-UNIX%/ESSP_RIMS_MacroInd_Processing.sh | cygwin
cela marche cependant j'ai un problème avec la fonction "read" de shell (ou avec une autre partie du code :) ): quand je fais une demande à l'utilisateur dans mon script shell via "READ", il n'a jamais la main pour rentrer les infos car le script tourne en permanence comme si le batch répond au shell. Ci dessous le script shell et le rendu :
-------------------------- Shellscript --------------------------
if [ -e File ]
then
echo FILE WILL BE OVERWRITTEN
echo OVERWRITTE FILE ? - YES / NO
read UserAnswer
########### NEITHER YES OR NO ANSWERS ###########
while [ "$UserAnswer" != "YES" ] && [ "$UserAnswer" != "NO" ]
do
echo ANSWER NOT UNDERSTOOD
read UserAnswer
done
############
########### YES ANSWER ###########
if [ "$UserAnswer" == "YES" ]
then
ACTIONS
fi
###########
########### NO ANSWER ###########
if [ "$UserAnswer" == "NO" ]
then
echo ----- FILE HAS NOT BEEN OVERWRITTEN -----
fi
###########
else
ACTIONS
fi
-------------------------- End of Schell script --------------------------
-------------------------- console DOS --------------------------
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
ANSWER NOT UNDERSTOOD
etc
Est que vous auriez une idée sur le pourquoi de ce comportement svp ?
Merci
A voir également:
- Lancement script .sh au travers d'un .bat
- Creer un fichier .bat - Guide
- Script vidéo youtube - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
- Qu'est ce qui se lance au démarrage de l'ordinateur - Guide
- Ghost script - Télécharger - Polices de caractères
2 réponses
Salut,
Essaies plutôt avec un script comme ça :
Essaies plutôt avec un script comme ça :
#! /bin/bash
if [ -e FILE ]
then
while true
do
echo FILE WILL BE OVERWRITTEN
echo OVERWRITTE FILE ? - YES / NO
read UserAnswer
case "${UserAnswer}" in
YES) echo "ACTIONS FOR YES"
break
;;
NO) echo "ACTIONS FOR NO"
break
;;
*) echo "ANSWER NOT UNDERSTOOD"
continue
;;
esac
done
fi
echo
echo "THAT'S ALL"
Ben
je vais essayer ca de suite !! :)
Ben
Cela donne le même résultat que precedement !!
Char Snipeur
Messages postés
10112
Statut
Contributeur
1 299
oui, cf. mon message.
salut.
le problème du pipe, si je ne me trompe pas c'est de relier la sortie standard d'une commande à l'entrée standard d'une autre. Donc, en toute logique, read va lire d'après ce que tu passes dans le pipe.
Chez moi, cygwin est en fait un .bat qui lance bash
essai alors de faire :
le problème du pipe, si je ne me trompe pas c'est de relier la sortie standard d'une commande à l'entrée standard d'une autre. Donc, en toute logique, read va lire d'après ce que tu passes dans le pipe.
Chez moi, cygwin est en fait un .bat qui lance bash
essai alors de faire :
C: // ou la lettre de lecture de cygwin chdir c:\cygwin\bin bash c:\chemin\script.sh
ALors je viens de tester ta solution à la difference je lance mon sh avec
bash --login -i c:\chemin\script.sh
sinon il ne reconnait pas certaines fonctions.
Cela lance bine mon sh ds cygwin mais il me trouve une erreur qui n'y avait pas avant => "ambiguous redirect" à chaque fois que j'envoie mes resultats dans un fichier texte !!
J'avoue ne pas comprendre le pourquoi de la difference alors que la manip est la mm mais executée de deux façons differentes ?
bash --login -i c:\chemin\script.sh
sinon il ne reconnait pas certaines fonctions.
Cela lance bine mon sh ds cygwin mais il me trouve une erreur qui n'y avait pas avant => "ambiguous redirect" à chaque fois que j'envoie mes resultats dans un fichier texte !!
J'avoue ne pas comprendre le pourquoi de la difference alors que la manip est la mm mais executée de deux façons differentes ?
oui le script shell fonctionne en indépendant sous cygwin sans problème et mes redirections sont faites comme ci-dessous :
merci :)
find "$Data_Location" -name *_Data.txt -print >> $Data_Location/Input/$JMA/Files_Path_$JMA.txt echo $DateFile\;$Data\;$DataA\;$DataB\;$DataC\;$DataName | tr '.' ',' >> $Data_Location/Input/$JMA/DATA/Availability_$DataName.txt
merci :)