Скрипт оболочки работает нормально в системе Linux, но не работает на машине с Windows - PullRequest
1 голос
/ 02 апреля 2019

Я запускаю Java-проект на компьютере с Windows, который читает файл сценария оболочки для получения токена авторизации, но получает следующую ошибку:

java.io.IOException: Невозможно запустить программу "./token.sh ": ошибка CreateProcess = 193,% 1 не является допустимым приложением Win32

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

Как запустить тот же код на компьютере с Windows.

Ответы [ 3 ]

1 голос
/ 02 апреля 2019

не будет. Вы видите, что команды, используемые в Windows CMD и Shell, отличаются, поскольку они являются совершенно разными платформами. Несмотря на то, что вы используете Java для выполнения, он не будет выполняться из-за принципиальной разницы. Это совершенно ясно из исключения, которое вы получаете.
Что вы можете сделать?

  • Прочитайте token.sh. Скорее всего, внутренняя реализация может быть реализовано в Windows. Затем создайте условие if, которое проверяет System.getProperty("os.name") тогда если его окна то вызовите файл bat и, если ОС основана на Unix, вызовите файл sh. За любая другая ОС выдает допустимое исключение.

  • Другой вероятный способ заключается в том, что если токен сгенерирован в машине независимо, вы можете использовать SSH (JSch или аналогичный) для удаленного подключения к UNIX сервер и получить токен. Если токен зависит от машины (если это токен аутентификации, то, вероятно, есть), попробуйте использовать интерпретатор Cygwin , что само по себе не гарантирует, что каждый файл оболочки будет работать в это.

  • Измените файл sh и его реализацию на python или ruby. Затем соответствующий интерпретатор может быть установлен на машины (которые он может иметь на самом деле, за исключением рабочих машин).
  • Напишите логику sh в самой Java, а не в сохранении файла сценария, поскольку независимость от платформы на самом деле является обязательным требованием, и у вас уже есть JRE, запущенный и работающий на обеих машинах.
1 голос
/ 02 апреля 2019

Вы не можете сделать это, так как команды, которые требует скрипт bash для Linux, сильно отличаются от команд Windows.Например -

Для просмотра содержимого каталога в Linux ls

Для просмотра содержимого каталога в Windows dir

Вы должны написать независимый от машины / архитектуры / ОС код, который будет работать во всех операционных системах.

Возможно, вы можете попробовать использовать для этого скрипты Python.

Или же вы можете запустить ssh с машины с Windows на машину с Linux и запустить этот скрипт из Windows.на сервере Linux.

0 голосов
/ 02 апреля 2019

Вы должны сделать специфичную для Windows реализацию этого скрипта. Наиболее распространенным и простым подходом является использование powershell.

Если вам нужна версия, которая работает как для Windows, так и для Unix, возможно, вам стоит взглянуть на python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...