【问题标题】:Pass wildcard to process builder将通配符传递给进程构建器
【发布时间】:2021-01-16 10:59:25
【问题描述】:

在 Java 和 C++ 中,参数都由 ' 包裹:

system("cmd arg1 arg2");// C++
Runtime.getRuntime().exec("cmd arg1 arg2");// Java
new ProcessBuilder("cmd","arg1","arg2").start();// Java
//=============== output
cmd 'arg1' 'arg2'

这可以防止参数被解释为通配符,例如:l* 将被解释为“lstar”而不是“l{everything-is-possible}”

另外,如果我添加一个 ' ,它将转换为 \'

如何通过这些编程语言传递通配符?

【问题讨论】:

  • 处理通配符的是shell——如果你不调用shell,就没有人处理通配符
  • 是的,谢谢你,我必须运行"Runtime.getRuntime().exec("bash -c cmd arg1 arg2");。你可以回答我会接受的

标签: java c++ shell


【解决方案1】:

处理通配符并将特定参数传递给进程的是 shell(bash、csh)等。例如,您可以运行 ls *.txt - shell 扩展 *.txt 并调用 ls a.txt b.txt c.txt(取决于当前目录中存在哪些文件)。

调用exec 不会调用任何shell,因此没有“通配符处理”。

进程可以进行自己的通配符处理 (if (arg.equals("*")) { ...),但我认为这非常罕见。

因此,要么调用进程必须进行匹配并将正确的参数传递给 exec,要么你需要使用 Runtime.getRuntime().exec("bash -c ls *.txt"); 这样的 shell 调用 exec

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2013-10-10
    • 2013-01-02
    相关资源
    最近更新 更多