1
votes

Le script Shell fonctionne bien sur le système Linux mais ne fonctionne pas sur la machine Windows

J'exécute un projet java sur une machine Windows qui lit le fichier de script shell pour obtenir le jeton d'autorisation mais j'obtiens l'erreur suivante:

java.io.IOException: impossible d'exécuter le programme "./token.sh": erreur CreateProcess = 193,% 1 n'est pas une application Win32 valide

Java program for reading the shell script:
private static String execCommand(String username){
String line;
      Process p = Runtime.getRuntime().exec("./token.sh -u " + username + " -p password123");
      BufferedReader input = new BufferedReader(new 
      InputStreamReader(p.getInputStream()));
      StringBuilder output = new StringBuilder();
      while ((line = input.readLine()) != null) {
        output.append(line);
}

Comment puis-je exécuter le même code sur une machine Windows.


4 commentaires

La syntaxe des scripts shell n'est pas la même sous Linux et Windows. Dans Windows également, les scripts sont généralement des fichiers .bat .


Parce que .sh est exécutable sous Linux mais pas sous Windows. Windows prend en charge l'extension .bat. Essayez de créer un fichier avec l'extension .bat avec le même contenu que votre fichier .sh et exécutez-le dans Windows


Publiez également le contenu de votre fichier token.sh


Copie possible du stackoverflow.com/ questions / 6464797 /…


3 Réponses :


0
votes

Vous devez également faire une implémentation spécifique à Windows de ce script. L'approche la plus courante et la plus simple serait d'utiliser PowerShell.

Si vous voulez une version qui fonctionne à la fois sous Windows et Unix, vous devriez peut-être vous pencher sur python.


0 commentaires

1
votes

Ce ne sera pas le cas. Vous voyez que les commandes utilisées dans Windows CMD et Shell sont différentes car ce sont des plates-formes complètement différentes. Même si vous utilisez java pour s'exécuter, il ne s'exécutera pas en raison d'une différence fondamentale sous-jacente. Cela ressort clairement de l'exception que vous obtenez.
Que pouvez-vous faire?

  • Lisez le fichier token.sh. Très probablement la mise en œuvre interne peut être implémenté dans Windows. Ensuite, créez une condition if qui vérifie System.getProperty ("os.name") Puis si ses fenêtres alors appelez le fichier bat et si le système d'exploitation est basé sur unix, appelez le fichier sh. Pour tous les autres OS lancent une exception valide.

  • Une autre manière probable est que, si le jeton généré dans la machine indépendant, vous pouvez utiliser SSH (JSch ou similaire) pour vous connecter à distance à un Serveur UNIX et récupérez le jeton. Si le jeton dépend de la machine (si c'est un jeton d'authentification, alors probablement), essayez d'utiliser l'interpréteur Cygwin , ce qui ne vous garantit pas que chaque fichier shell s'exécutera dans ça.

  • Changez le fichier sh et son implémentation en python ou ruby. Ensuite, l'interpréteur respectif peut être installé sur les machines (qu'il pourrait avoir, à l'exception des machines de production).
  • Écrivez la logique sh en Java lui-même plutôt que de conserver un fichier de script, car l'indépendance de la plate-forme est en fait une exigence ici et vous avez déjà JRE opérationnel sur les deux machines.

0 commentaires

1
votes

Vous ne pouvez pas faire cela car les commandes requises par le script bash Linux sont très différentes des commandes Windows. Par exemple -

Pour lister le contenu d'un répertoire sous Linux ls

Pour lister le contenu d'un répertoire dans Windows dir

Vous devez écrire un code indépendant de la machine / de l'architecture / du système d'exploitation pour fonctionner sur tous les systèmes d'exploitation.

Peut-être que vous pouvez essayer d'utiliser les scripts Python pour cela.

Sinon, vous pouvez ssh d'une machine Windows à une machine Linux et exécuter ce script à partir de Windows sur un serveur Linux.


0 commentaires