为什么我的Java代码不正确地执行bash命令?

为什么我的Java代码不正确地执行bash命令?,第1张

概述为什么我的Java代码不正确地执行bash命令

我正在尝试使我的Java程序与linux bash交互,但出现了一些问题。 我有一个简单的可执行文件,从stdin读取一个整数,并输出其正方形。 执行

echo 5 | ./prog

从bash本身打印正确的答案25在stdout但运行

import java.io.*; public class Main { public static voID main(String[] args) throws InterruptedException,IOException { Runtime run = Runtime.getRuntime(); Process proc = run.exec("echo 5 | ./prog"); proc.waitFor(); BufferedReader br = new BufferedReader(new inputStreamReader(proc.getinputStream())); while(br.ready()) System.out.println(br.readline()); } }

竟然给了5 | ./prog 5 | ./prog 。 解决办法是什么?

Bash:如何远程运行脚本

sed:匹配包含换行符的string

在windows中的Netcatnetworking服务器

如何阅读使用“读”从文件描述符3在bash脚本?

bash中的stringreplace – 错误的replace错误

避免col的32KB长度限制

grep为什么不用冒号在这个模式下工作?

linuxselect带额外选项的语句

MysqL加载数据:在准备好的语句协议中不支持这个命令

在命令行启动后捕获进程的STDIN / STDERR / STDOUT?

Java exec不能像这样运行shell命令。 如果你想运行一个shell命令,你需要明确地调用shell; 例如

Process proc = run.exec(new String[]{"/bin/sh","-c","echo 5 | ./prog"});

有关更多详细信息,请阅读exec(String)和exec(String[])的javadocs。 请注意,这些是“便利的方法”,您需要遵循链接到底层方法的链接,以全面了解javadoc的说法。

如果你想要更多的细节,有源代码…

说明:

手动分割命令的原因是exec(String)不会将命令正确地分割成单个命令和参数 。 它不能。 这是一个管道中有两个命令的例子。

使用“sh”的原因是…呃…你需要一个shell来解析和处理一个shell命令行。 Java的exec命令不支持shell语法……正如javadoc解释的那样。

“-c”选项的用途由“man sh”解释。 基本上, sh -c "abc"意思是“使用'sh'来运行命令行'ab c'”。

FWIW,在技术上可以仅用Java构建和运行管道(即不依靠外部壳体),但通常不值得付出努力。 您已经通过运行外部命令引入了平台依赖关系,因此以特定的shell命令和语法形式的额外依赖关系不会使事情变得更糟。

总结

以上是内存溢出为你收集整理的为什么我的Java代码不正确地执行bash命令?全部内容,希望文章能够帮你解决为什么我的Java代码不正确地执行bash命令?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1155293.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存