2014-10-13 3 views
0


Я пишу простую команду оболочки для нашего приложения Java. У меня нет опыта работы с оболочкой Linux и нужна простая команда. То, что я пытаюсь сделать, это получить имя процесса активного окна пользователя. С другой вопрос, который я нашел скрипт следующим образом:Получение возвращаемого значения awk с помощью Java

ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}' 

Источник: https://unix.stackexchange.com/questions/38867/is-it-possible-to-retrieve-the-active-window-process-title-in-gnome

Я в состоянии проверить и распечатать результат, но. Невозможно получить значение со стороны Java. Однако, если я запускаю простой скрипт, например

echo asdasd 

Я могу получить строку «asdasd» просто отлично. Как я понимаю, Java может получить только команды эха.

На стороне Java я использую этот метод: частная строка ExecuteCommand (командная строка) {

StringBuffer output = new StringBuffer(); 

    Process p; 
    try { 
     p = Runtime.getRuntime().exec(command); 
     p.waitFor(); 
     BufferedReader reader = 
         new BufferedReader(new InputStreamReader(p.getInputStream())); 

        String line = "";   
     while ((line = reader.readLine())!= null) { 
      output.append(line + "\n"); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return output.toString(); 

} 

Источник: http://www.mkyong.com/java/how-to-execute-shell-command-from-java/

------ решаемые ------

Решено спасибо ответу smasseman, однако я сменил команду String на следующий массив строк,

String[] args = {"/bin/sh","-c",command }; 

«команда» - это сам скрипт, а не путь к файлу, поскольку он дал ошибки.

ответ

1

Вы не можете использовать трубы, когда выполняете его из java. Хитрость заключается в том, чтобы написать ваши linux-команды и каналы в скрипт и выполнить этот скрипт из java. Создайте этот сценарий (позволяет вызвать activewin.sh скрипт):

#!/bin/bash ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'

Сделать исполняемым chmod +x activewin.sh После этого вы можете выполнить скрипт в Java p = Runtime.getRuntime().exec("./activewin.sh");

Конечно, вы можете написать файл сценария из java, выполнить его, а затем удалить, если вы хотите, чтобы приложение было более «автономным».

+0

Спасибо, это сделал трюк! – Oguz

Смежные вопросы