【问题标题】:Shell (bash) brace expansion with Java's runtime.exec使用 Java 的 runtime.exec 进行 Shell (bash) 大括号扩展
【发布时间】:2013-05-05 09:31:58
【问题描述】:

我正在尝试让扩展命令与 runtime.exec 一起使用,但大括号被解释为文字而不是被扩展。这是我正在尝试做的事情:

String command = "mkdir -p Foldername{1,2,3}/InnerFolder";
Runtime.getRuntime().exec( new String[] { "sh", "-c", command } );

不幸的是,这在我的当前目录中提供了一个名为“Foldername{1,2,3}”的文件夹,而不是“Foldername1”、“Foldername2”和“Foldername3”。有谁知道防止大括号被解释为文字的方法?

【问题讨论】:

    标签: java bash runtime.exec mkdir


    【解决方案1】:

    您正在尝试使用 Bash 通配符。它们在 Bash shell 中进行解释。您正在直接运行 mkdir,因此没有 shell 可以解释 {}。您需要指定 shell 的路径

    String command = "mkdir -p Foldername{1,2,3}/InnerFolder";
    Runtime.getRuntime().exec( new String[] { "/bin/bash", "-c", command } );
    

    Source.

    【讨论】:

    • 奇怪的是,它指定了“bash”而不仅仅是“sh”为我解决了这个问题。一定很喜欢 AIX 做每件事的方式与世界其他地方有点不同......无论如何,谢谢!
    • @David:这不是 AIX 的事情。 Bourne shell (sh) 不支持大括号扩展。
    • 我的意思不仅仅是 sh/bash 在 AIX 上实际上是不同的。在我最近使用的每个 Linux 系统上,sh 和 bash 都是符号链接的(不记得它是哪条路),但在任何一种情况下都会执行相同的二进制文件。
    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多