【问题标题】:Can't run java in bashscript无法在 bash 脚本中运行 java
【发布时间】:2013-01-12 09:21:10
【问题描述】:

我正在尝试编写一个简单地编译 java 文件然后运行它的 bash 脚本

#!/bin/bash
read name
javac $name
$name | sed -r "s/.java//" | java

但不是运行 java 文件,而是打开 java。

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

       blah blah blah

【问题讨论】:

  • 可能是因为您试图通过管道输入 Java,而不是像使用说明所说的那样运行 Java。为什么不能只使用 java ${name/.java/} 并利用 bash?
  • 是否有充分的理由避免使用 IDE?一键编译运行程序。
  • @PeterLawrey IMO 是的,有,因为您可能没有 IDE,或者可能正在尝试自动化某些过程,或者您只是想学习新知识。
  • 为新事物点赞。但是,如果您没有 IDE,则应该购买一个。恕我直言,在当今这个时代,没有充分的理由以艰难的方式做事。如果你想自动化构建,我建议使用 maven 或 ant。
  • 在下面寻找@nneonneo 的答案。作为参考,这是您使用方法的方式:echo "$name" | sed -r "s/\.java//" | xargs java

标签: java bash terminal


【解决方案1】:

尝试替换为:

#!/bin/bash
read name
javac $name
name=$(echo $name|sed -r "s/.java//")
java $name 

或者,更好的是:只输入没有“.java”的主类:

#!/bin/bash
read name
javac $name.java
java $name 

关键是,您需要将一个参数传递给“java”命令。您不能只使用标准输出中的管道。

【讨论】:

  • ...? $name=$(sed -r "s/.java//")-bash: foo.java=: command not found
  • 也许我缺少一些神秘的 bash 知识,但尽我所能,您不能分配给 $name,因为 $name 将被扩展(首先)。您想以 "name=" 开头来更新 name 变量的内容。
  • 这不是“真正神秘的”。试试这个:name=Moose.java; echo name= $name; name=$(echo $name|sed -r "s/.java//"); echo name= $name
  • @Souren - 很抱歉给您带来所有愚蠢的噪音和混乱。问题很简单:你不能使用管道连接到 Java 命令,你需要给它一个实际的参数:EX:java myprog。你有几个很好的建议来做这件事。 '希望对您有所帮助...
【解决方案2】:

试试这个:

#!/bin/bash
read name
javac $name
class=`echo $name | sed -r "s/.java//"`
`java $class`

【讨论】:

    【解决方案3】:

    你想用 Bash 做一个简单的替换吗?只需使用内置的替换工具即可。

    java ${name/.java/}
    

    不需要sed。

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 2012-09-14
      • 2023-03-14
      • 2011-08-10
      • 1970-01-01
      • 2012-11-22
      • 2018-08-15
      • 2014-02-20
      • 1970-01-01
      相关资源
      最近更新 更多