【问题标题】:Unable to get output from shell script command in java无法从java中的shell脚本命令获取输出
【发布时间】:2016-10-21 05:46:25
【问题描述】:

我正在使用 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)。

请帮帮我。

【问题讨论】:

  • 这可以编译吗?在 "$$"(而不是 \"$$\")中的字符串中有两个未转义的引号。
  • 我只在我的程序中使用这个\"$$\"。 thnx 我也会在这里改变。

标签: java linux shell


【解决方案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 - grep 参数中的字符串feature_service.sh[f] 避免在链中多次使用grep
  • awk '{print $1}' - 打印输出的第一列,使用默认的空白字符作为分隔符
  • tr '\n' ' ' - 用空格字符替换输出中的所有换行符

【讨论】:

  • 命令在终端上运行,但如果通过 java 程序运行则为 null(来自 bufferedReader)。
  • @vinni 我相信你的运行方式不同。如果您在终端中运行/bin/bash -c echo $(...),它不会返回任何内容。
  • thnx 或帮助,我正在使用 pgrep -f feature_service.sh 并且它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多