java调用本地shell脚本失败,为什么我的Java代码错误地执行bash命令?

Java exec无法像这样运行shell命令.如果要运行shell命令,则需要显式调用shell;例如

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

有关Java如何处理此问题的更多详细信息,请阅读exec(String)和exec(String[])的javadoc.请注意,这些是“便捷方法”,您需要遵循指向底层方法的链接链,以便全面了解javadoc所说的内容. .

如果您想了解Java如何处理这个问题的更多细节,那么有源代码……

如果您想深入理解为什么Java本身不处理shell语法,您可能需要深入研究UNIX / Linux系统的体系结构和原理,以及应用程序,操作系统和命令shell之间的关注点分离.请注意,有无数不同的shell,每个shell都有(可能)不同的引用,参数拆分,重定向,管道等规则.大多数流行的外壳都很相似,但这就是事情的发展方式.

解决方案的解释:

>手动拆分命令的原因是exec(String)不会将命令正确地拆分为单个命令和参数.它不能.这是一个管道中有两个命令的示例.

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

>“-c”选项的目的由“man sh”解释.基本上,sh -c“a b c”表示“使用’sh’来运行命令行’a b c’”.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值