我使用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)。
请帮帮我。
答案 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' ' '
- 用空格字符替换输出中的所有换行符