【问题标题】:How to make a Java Shell Command (NOT how to run a shell command with Java)如何制作 Java Shell 命令(而不是如何使用 Java 运行 shell 命令)
【发布时间】:2015-04-04 17:13:19
【问题描述】:

我刚刚完成了一个终端程序,但不知道如何正确部署它,以便可以通过 bash 执行它:

myjavaprogram [options]

充其量,我似乎只能得到

java -jar /path/to/myjavaprogram [options]

工作。但这还不够。我想给程序起一个清晰的名称,以便我可以快速输入。在你说之前,是的,我已经尝试过制作一个 shell 命令。它是这样的,我将它命名为我想命名的:

#!/bin/bash
java -jar /path/to/myjavaprogram

我将它与其他命令一起保存到 /usr/bin。

问题是当我尝试运行它时,它不允许我输入选项。以前部署过终端应用程序的任何 Java 人员有什么建议吗?我不想在每次运行该东西时都输入完整的路径名,因为它用于非常大容量的目的(大量数据处理等)。任何建议表示赞赏。谢谢。

【问题讨论】:

  • 只需将您的脚本更改为java -jar /path/to/myjavaprogram $* 可能就是您想要的吗?
  • 它不这样做。当我这样做时,java程序无法识别任何输入。

标签: java bash shell deployment terminal


【解决方案1】:

对不起。 HTML 搞砸了。我的意思是说我希望它像“myjavaprogram [options]”一样运行,我不小心使用了尖括号。

【讨论】:

    【解决方案2】:

    如果您想要 Bash 解决方案,请查看 bash 命令行参数。通常你会使用 $1、$2、$3 等来指定选项,所以在你的情况下,如果你想要 3 个选项,你会写这个。

    java -jar /path/to/myjavaprogram $1 $2 $3
    

    然后像这样运行它

    my_prog 1 2 3
    

    如果您想告诉 bash 处理给定的任何其他命令行选项,请使用 $@

    java -jar /path/to/myjavaprogram $@
    

    然后像这样运行它

    my_proc 1 2 3 4 5 6 7 8 9 10
    

    【讨论】:

    • 那么我有什么理由不总是使用 $@ 吗?
    • 如果您知道您的程序需要一定数量的参数,并且您只想强制执行该数量的参数,那么您可能需要使用 $1、$2、$3 等。无论您需要多少。如果您不需要如此严格的政策,那么您可以使用 $@。
    • 它给了我错误,当我简单地执行 java -jar /path/to/file 方法时它没有给我。即,当我尝试以这种方式运行命令时,它给了我有关选项的输入错误(我在我的 java 程序中设置的选项)。当我执行 java -jar 时不会发生。
    • 对不起,我没有提到这一点,但我的程序需要识别选项,所以它们使用正常的破折号表示法完成。即输入是-i,输出是-o,等等。
    • @TomBurns 在这种情况下,您要么需要在 Java 应用程序中使用命令行处理库(这可能是最好的情况),要么在 Bash 中使用 getops,但如果您可以在 Java 程序本身中这样做。
    【解决方案3】:

    这应该可以工作

    #! /bin/bash
    exec java -jar /path/to/myjavaprogram "$@"
    

    注意使用exec 来丢弃bash$@ 周围的引号以保留空格。

    编辑

    试试这个作为你的java程序

    public class T1 {
        public static void main(String args[]) {
            System.out.println(java.util.Arrays.toString(args));
        }
    }
    

    【讨论】:

    • “不工作”是什么意思?您是否打印了您的 java 程序中收到的选项?
    • 选项格式与任何linux终端程序接收的相同。想想 ls、cat、mkdir、cp 等等。一个破折号,然后是一个字母来表示某些选项。这就是我的选项通过 Apache CLI 命令行库提供给我的程序的方式,它解析这些选项,以便我可以获取用户输入并相应地处理它。问题是当我尝试运行此脚本时,我收到错误消息,表明没有输入任何选项,当它们输入时,这意味着 shell 和 java 之间存在一些问题。我的程序没有得到用于 CLI 解析的 args[] 输入。
    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2017-04-11
    • 2010-11-27
    相关资源
    最近更新 更多