Два вопроса здесь.
Во-первых, хорошо, что Rekin спросил, используете ли вы Cygwin, потому что это очень актуально. Cygwin обрабатывает диски Windows, добавляя cygdrive/
, а затем имя диска. Он также предпочитает пути в стиле Unix. Поэтому вы должны изменить свою команду Unix на:
String unixCommand = "sh /cygdrive/u/home/ash/test.sh";
Это должно успешно выполнить ваш скрипт.
Однако затем вы увидите, что на выходе будут просто цифры вместо любого разборчивого текста. Это потому, что в вашем runShellScript
вы используете метод read()
самого низкого уровня и читаете выходные данные процесса по одному байту за раз, затем печатаете каждый байт, каждый на отдельной отдельной строке. По крайней мере, вы должны использовать поток более высокого уровня, например DataInputStream
- или, в основном, любой класс с методом read*
, получающим Strings
вместо байтов. Более того, используйте подкласс Reader
, такой как BufferedReader
, поскольку это современный подход со времен JDK 1.1. Как только вы это сделаете, вы должны увидеть результат.