java - 运行时.getRuntime().exec() : executing touch creates a directory when executing after mkdir

标签 java

当我执行这行代码时:

    Runtime.getRuntime().exec(new String[] {"mkdir", "-p", "/home/stuff/Keyring", "&& touch", "/home/stuff/Keyring/keyring.gpg"});

Keyring 文件夹中的 messaging.gpg 被创建为目录而不是文件,我不明白为什么。有什么想法吗?

最佳答案

您正在使用以下参数执行 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 或类似 API,并完全避免 fork 进程?

关于java - 运行时.getRuntime().exec() : executing touch creates a directory when executing after mkdir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49669940/

相关文章:

java - 仅在 maven-changes-plugin JIRA 报告中包含特定问题

java - 计时器加载另一个 Activity 需要多长时间

java - Lucene 索引大小

java - Appium错误:Exception in thread "main" org. openqa.selenium.SessionNotCreatedException:无法创建新的远程 session

java - (处理)当我尝试运行此代码时出现空指针异常

java - 如何生成随机码并检查它是否存在于数据库中

java - 使用 java 驱动程序提高 Mongodb 的性能

java - async-http-client 请求与 NettyAsyncHttpProvider 超时

java - Hibernate删除关系manyToMany

java - 有没有办法循环遍历java中动态创建的组件?