Java-код для выполнения файла .sh - PullRequest
0 голосов
/ 24 июня 2011

У меня есть файл .sh, хранящийся в какой-то системе Linux. Полный путь к файлу:

/comviva/CPP/Kokila/TransactionHandler/scripts/stopTH.sh

Я пытаюсь выполнить его до

Runtime.getRuntime().exec(`/comviva/CPP/Kokila/TransactionHandler/scripts/stopTH.sh`)

но это исключение.

Я хочу выполнить этот файл из моей Java-программы в среде MS-Windows; это возможно?

Ответы [ 5 ]

3 голосов
/ 24 июня 2011

Чтобы выполнить сценарий .sh в Windows, вам необходимо установить подходящий интерпретатор команд.Например, вы можете установить на своем компьютере Windows среду Cygwin и использовать ее интерпретатор bash.

Однако Windows не является Linux даже с Cygwin.Некоторые сценарии не будут переноситься из одной среды в другую без изменений.Если у меня возникла проблема с выполнением сценария через Java в среде Linux, я бы предпочел отладить проблему в этой среде.

Помните, что вы можете запустить свой процесс Java в Linux в режиме отладки и подключить отладчик IDE вWindows для этого удаленного процесса.

2 голосов
/ 27 июня 2011

Спасибо всем за ваши ответы.Я нашел решение проблемы.Для такой ситуации нам нужно привязать мой компьютер с Windows к системе Linux.Вот код, который работал:

public String executeSHFile(String Username, String Password,String  Hostname)
    {
        String hostname = Hostname;
        String username = Username;
        String password = Password;
        try{
            Connection conn = new Connection(hostname);
               conn.connect();
               boolean isAuthenticated = conn.authenticateWithPassword(username, password);
               if (isAuthenticated == false)
                throw new IOException("Authentication failed.");
               Session sess = conn.openSession();
              sess.execCommand("sh //full path/file name.sh");

               System.out.println("Here is some information about the remote host:");
               InputStream stdout = new StreamGobbler(sess.getStdout());
               BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
               while (true)
                {
                    String line = br.readLine();
                    if (line == null)
                        break;
                    current_time=line;
                    System.out.println(line);
                }

               System.out.println("ExitCode: " + sess.getExitStatus());
               /* Close this session */

                sess.close();

                /* Close the connection */

                conn.close();
        }catch(IOException e)
        {
            e.printStackTrace(System.err);
            System.exit(2);
        }finally{

        }
}

Спасибо.

2 голосов
/ 24 июня 2011

Вот мой код.Как говорится в комментарии, работает в Linux, не работает в Windows (XP).AFAIK проблема с Windows заключается в том, что cmd.exe странный с точки зрения его параметров.Для вашей конкретной подзадачи вы, вероятно, можете заставить ее работать, играя с кавычками и, возможно, встраивая параметры подзадачи в саму подзадачу.

1 голос
/ 24 июня 2011

Я провел быструю проверку здесь, при условии, что у вас на компьютере установлен / bin / bash:

мой /tmp/test.sh:

#!/bin/bash
echo `ls`

мой java-код:

try {
    InputStream is = Runtime.getRuntime().exec("/bin/bash /tmp/test.sh").getInputStream();
    int i = is.read();
    while(i > 0) {
        System.out.print((char)i);
        i = is.read();
    }
} catch (IOException e) {
    e.printStackTrace();
}

output: все файлы в текущем каталоге

edit: я как-то упустил из виду комментарий "execute from windows".Я не знаю, что вы имеете в виду под этим.

0 голосов
/ 23 апреля 2013

вы можете сделать .bat файл (пакетный файл), который может работать на окнах. поместите содержимое файла .sh в файл .bat запустить процесс из вашего приложения, например:

Process.Start("myFile.bat");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...