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