我想用ProcessBuilder
执行多个命令。我想避免使用脚本文件,只使用Java中的硬编码字符串。
这是我想要执行的当前文件。
#!/bin/sh
if [ -e /tmp/pipe ]
then
rm /tmp/pipe
fi
mkfifo /tmp/pipe
tail -f /dev/null >/tmp/pipe & # keep pipe alive
cat /tmp/pipe | omxplayer $1 -r &
现在,这是我目前的代码。
private static final String[][] commands = {
{"rm", "-f", "/tmp/airpi_pipe"},
{"mkfifo", "/tmp/airpi_pipe"},
{"tail", "-f", "/dev/null", ">", "/tmp/airpi_pipe"}
};
public static void main(String[] args) throws IOException {
for (String[] str : commands) {
ProcessBuilder pb = new ProcessBuilder(str);
pb.redirectErrorStream(true);
Process process = pb.start();
InputStream is = process.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
System.err.println("next one");
}
}
显然,tail
命令在我的ProcessBuilder
中不起作用。我甚至没有试过cat /tmp/pipe | omxplayer $1 -r &
。
所以,我的问题是,我怎么能设法用ProcessBuilder
执行我的sh脚本的内容,但只能使用硬编码命令(没有脚本文件),正如我试图做的那样?
谢谢。
更新
我不得不使用新的ProcessBuilder(“/ bin / sh”,“ - c”,“< commands>”);使它工作!