使用Java获取awk返回值

时间:2014-10-13 07:53:41

标签: java linux shell unix terminal


我正在为我们的Java应用程序编写一个简单的shell命令。我没有Linux shell的经验,需要一个简单的命令。我尝试做的是获取用户的活动窗口的进程名称。从另一个问题我发现了一个脚本如下:

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只能获得echo命令。

在java方面我使用这个方法:     private String executeCommand(String command){

    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,

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

“command”是脚本本身而不是文件路径,因为它给出了错误。

2 个答案:

答案 0 :(得分:1)

从java执行管道时,不能使用管道。诀窍是将您的linux命令和管道写入脚本并从java执行该脚本。 创建此脚本(让我们调用脚本activewin.sh):

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

Make是可执行的chmod +x activewin.sh 然后,您可以在java p = Runtime.getRuntime().exec("./activewin.sh");

中执行该脚本

你当然可以从java编写脚本文件,执行它然后删除它,如果你希望你的应用程序更“独立”。

答案 1 :(得分:0)

我会使用Apache Comons Exec