El script de Shell funciona bien en el sistema Linux pero no se ejecuta en la máquina Windows

Estoy ejecutando un proyecto java en una máquina con Windows que lee el archivo de script de shell para obtener el token de autorización pero aparece el siguiente error:

java.io.IOException: no se puede ejecutar el programa "./token.sh": error CreateProcess = 193,% 1 no es una aplicación Win32 válida

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);
}

¿Cómo puedo ejecutar el mismo código en la máquina de Windows?

Respuesta 1

No lo hará. Verá que los comandos utilizados en Windows CMD y Shell son diferentes, ya que son plataformas completamente diferentes. Aunque use Java para ejecutar, no se ejecutará debido a la diferencia fundamental subyacente. Está bastante claro por la excepción que está recibiendo.
¿Qué puedes hacer?

  • Lee el token.sh. Lo más probable es que la implementación interna se pueda implementar en Windows. Luego, cree una condición if que compruebe. System.getProperty("os.name")Luego, si sus ventanas llaman al archivo bat y si el sistema operativo está basado en Unix, llame al archivo sh. Para cualquier otro sistema operativo, arroje una excepción válida.

  • Otra forma probable es que, si el token generado en la máquina es independiente, puede usar SSH (JSch o similar) para conectarse de forma remota a un servidor UNIX y obtener el token. Si el token depende de la máquina (si es un token de autenticación, entonces probablemente lo sea), intente usar el intérprete Cygwin, que en sí mismo no le asegura que todos los archivos de shell se ejecutarán en él.

  • Cambie el archivo sh y su implementación a python o ruby. Luego se puede instalar el respectivo intérprete en las máquinas (que en realidad podría tener, a excepción de las máquinas de producción).
  • Escriba la lógica sh en Java en lugar de mantener un archivo de script, ya que la independencia de la plataforma es realmente un requisito aquí y ya tiene JRE en funcionamiento en ambas máquinas.
Respuesta: 2

No puede hacerlo, ya que los comandos que requiere el script bash de Linux son muy diferentes a los comandos de Windows. Por ejemplo -

Para enumerar los contenidos en un directorio en Linux ls

Para enumerar los contenidos en un directorio en Windows dir

Debe escribir un código independiente de máquina / arquitectura / SO para ejecutar en todos los sistemas operativos.

Tal vez, puede intentar usar secuencias de comandos de Python para eso.

O bien, puede hacer ssh desde la máquina Windows a la máquina Linux y ejecutar ese script desde Windows en el servidor Linux.

Respuesta: 3

Tengo un formulario con ese código: public Form () {initComponents (); pruebe {File file = new File ("avatar.jpg"); BufferedImage image = ImageIO.read (archivo); } captura (...

Tengo un problema con la creación de un archivo de texto con el nombre que quiero. Quiero crear un archivo de texto llamado: 'nombre de usuario' Sujetos. private void saveSubjects () {RegisterFrame r = new RegisterFrame (); ...

Estoy tratando de hacer lo siguiente ... Tengo una lista de cadenas en el siguiente modo: John, Peter, Carl Rose, Joanne, Natalie En este momento estoy leyendo línea por línea y produciendo una secuencia ... Como esta : ...

Estoy haciendo un sistema de pedidos con patrones de diseño de integración para una tarea escolar. Un cliente puede realizar un pedido y el intermediario que transmite una solicitud de suministro a todos los proveedores (más de 100), que ...