我正在尝试使用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()

关于java - 使用exec调用在Java中创建命名管道,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31416151/

10-11 21:24