Runtime.getRuntime()。exec():执行touch会在mkdir之后执行时创建一个目录

时间:2018-04-05 10:20:57

标签: java

当我执行这行代码时:

    Runtime.getRuntime().exec(new String[] {"mkdir", "-p", "/home/stuff/Keyring", "&& touch", "/home/stuff/Keyring/keyring.gpg"});
Keyring文件夹中的messaging.gpg是作为目录而不是文件创建的,我无法弄清楚原因。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

您正在使用以下参数执行mkdir

"-p", "/home/stuff/Keyring", "&& touch", "/home/stuff/Keyring/keyring.gpg"

exec()的第一个参数是要执行的进程)所以-p告诉mkdir在需要时构建父目录,其余参数是要创建的目录。因此你的问题/问题(我怀疑你的某个地方叫'&& touch')

看起来你想要执行一个shell脚本,所以你需要封装上面的内容,例如:提供如下参数:

/bin/sh -c "mkdir -p /home/stuff/Keyring && touch /home/stuff/Keyring/keyring.gpg"

即。您正在执行/bin/sh,并在shell命令行上提供命令。

或者更好的是,使用java.io.File API或类似功能,并完全避免分支进程?