ProcessBuilder具有多个命令

时间:2014-01-21 22:11:28

标签: java linux sh processbuilder

我想用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>”);使它工作!

0 个答案:

没有答案