使用 exec 调用在 Java 中创建命名管道

Creating a named pipe in Java with exec calls

我正在尝试使用 exec 调用在 Java 中创建命名管道。我有这行代码

Process p = Runtime.getRuntime().exec("/bin/sh -c \"mkfifo ~/myFifo && tail -f ~/myFifo | csh -s\"");

但是当我在调用后查找 ~/myFifo 时,它不存在。有什么理由这行不通吗?

我也尝试过不使用 /bin/sh -c 位,但也没有用。

编辑

final String [] cmds = {"/bin/sh", "-c", "\"mkfifo ~/myFifo && tail -f ~/myFifo | csh -s\""};

Process p = Runtime.getRuntime().exec(cmds);

如果你写出第三个参数,你会得到:

"mkfifo ~/myFifo && tail -f ~/myFifo | csh -s"

如果您尝试 运行 shell,您会发现它不起作用:

$ "mkfifo ~/myFifo && tail -f ~/myFifo | csh -s"
bash: mkfifo ~/myFifo && tail -f ~/myFifo | csh -s: No such file or directory

只需删除您添加的文字引号:

final String [] cmds = {"/bin/sh", "-c", "mkfifo ~/myFifo && tail -f ~/myFifo | csh -s"};

并记得阅读 Process.getInputStream()