【问题标题】:Getting awk return value with Java使用 Java 获取 awk 返回值
【发布时间】:2014-12-07 17:41:51
【问题描述】:


我正在为我们的 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端我使用这个方法: 私有字符串执行命令(字符串命令){

    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[] args = {"/bin/sh","-c",command };

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

【问题讨论】:

    标签: java linux shell unix terminal


    【解决方案1】:

    我会为此使用Apache Comons Exec

    【讨论】:

      【解决方案2】:

      从 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 编写脚本文件,执行它然后将其删除。

      【讨论】:

        猜你喜欢
        • 2011-07-21
        • 1970-01-01
        • 1970-01-01
        • 2014-07-04
        • 1970-01-01
        • 2014-01-07
        • 2019-04-22
        • 1970-01-01
        • 2014-04-01
        相关资源
        最近更新 更多