【发布时间】:2022-10-13 04:07:19
【问题描述】:
我正在尝试使用<<< 将字符串传递给 Linux 命令:
cat <<< 'Hello'
虽然这在终端中完美运行,但 Java 不会执行此操作
String cmd = "cat <<< 'Hello'";
Process p = new ProcessBuilder(cmd.split(" ")).start();
String stderr = IOUtils.toString(p.getErrorStream(), Charset.defaultCharset());
String stdout = IOUtils.toString(p.getInputStream(), Charset.defaultCharset());
System.out.println(stderr);
来自终端的错误:
cat: '<<<': No such file or directory
cat: "'hello'": No such file or directory
为什么呢?没有<<< 的命令以通常的方式执行。
【问题讨论】:
-
因为输入和输出重定向是壳特征。
-
好的了解了。谢谢。有什么解决方法吗?
-
通过调用 'bash' (String cmd='bash') 或任何你喜欢的方式打开 shell,然后使用 stdio (p.getOutputstream) 将命令写入 shell,并使用 p.getInputstream 读取结果
-
我的意思是
String input = "Hello";。然后您可以将p.getOutputStream()的值包装在OutputStreamWriter 中,并将input写入该OutputStreamWriter。 -
请注意,
<<<通过创建一个临时文件、将字符串写入其中并将该文件连接到标准输入来工作。当然,您可以在 Java 中自己完成所有这些工作,而完全不依赖 shell 功能。