无法从java

时间:2016-10-21 05:46:25

标签: java linux shell

我使用ProcessBuilder在java程序中运行shell脚本命令,这是我的代码:

String lastLine = "";

ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", "echo $(ps -eo pid,args | grep -v grep | grep -v \"$$"\ | grep feature_service.sh | awk '{print $1}')");

BufferedReader reader =
                    new BufferedReader(new InputStreamReader(process.getInputStream()));

String line;
            while ((line = reader.readLine()) != null) {
                lastLine = line;
            }

此输出:空字符串("")

但是如果我在终端上运行相同的命令它工作正常(进程的pid)。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

以下简化的Shell命令正在运行。

ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", 
    "-c", 
    "ps -eo pid,args|grep [f]eature_service.sh|awk '{print $1}'|tr '\\n' ' '");
  • ps -eo pid,args - 列出进程ID和参数
  • grep [f]eature_service.sh - 参数中字符串feature_service.sh的grep,[f]避免在链中多次使用grep
  • awk '{print $1}' - 使用默认的空格字符作为分隔符打印输出的第一列
  • tr '\n' ' ' - 用空格字符替换输出中的所有换行符