Возврат и сохранение строковой переменной из сценария оболочки в Java - PullRequest
1 голос
/ 23 сентября 2010

Я хочу сохранить значение в переменной в этом скрипте:

#!/bin/sh
filename=$1

var= $filename | sed 's/\([A-Z]\)/ \1/g';

return var;

(Firstable, я не уверен, правильно ли это), и после thar получите это значение и используйте его в моей Java-программе, например:

Process s = Runtime.getRuntime().exec("./CreateTitle.sh "+filename);
OutputStream exitVal = s.getOutputStream();
System.out.println("Process exitValue: " + exitVal.toString());

Я думаю, что что-то не так, потому что в последнем sysout я не получаю желаемого результата, но вот этот:

Process exitValue: java.io.BufferedOutputStream@3e25a5

Любая помощь? Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 23 сентября 2010

Это не OutputStream, что вам нужно. Вот код, который вам нужен

BufferedReader b = new BufferedReader(new InputStreamReader(s.getInputStream()));
String output = "", line = "";
while((line = br.readLine()) != null) {
    output += line;
}
System.out.println(output);

Тебе тоже стоит посмотреть на ответ Марка. Он освещает проблему с помощью сценария оболочки.

РЕДАКТИРОВАТЬ: Вот измененный сценарий

#!/bin/sh
filename=$1

var = $filename | sed 's/\([A-Z]\)/ \1/g';

echo var;

Мне не очень комфортно со сценариями оболочки. Кто-то поправит меня, если здесь что-то не так.

2 голосов
/ 23 сентября 2010

Эта статья поможет вам.

0 голосов
/ 23 сентября 2010

В принципе, вы не можете этого сделать.

Переменная среды оболочки является локальной переменной для этой оболочки, и процесс, который ее породил, не может видеть данные в оболочке, кроме кода возврата, который является целым числом.

Вы можете записать переменную оболочки в стандартный вывод, а затем Java сможет прочитать это.

Также ваш код выводит правильный адрес адреса потока - чтобы получить значения в потоке, вам нужно открыть его и прочитать из потока

В вашем примере я бы использовал классы регулярных выражений Java.

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