【问题标题】:How to pass arguments from wrapper shell script to Java application?如何将参数从包装器 shell 脚本传递到 Java 应用程序?
【发布时间】:2011-06-13 21:25:58
【问题描述】:

我想在命令行(linux 和 mac)上运行我正在创建的 Java 程序。我不想一直输入“java”和参数,所以我正在考虑创建包装脚本。这样做的最佳方法是什么,以便他们在任何地方工作?我也希望能够传递参数。我正在考虑使用“shift”来执行此操作(删除第一个参数)。

有没有更好的方法可以完全不使用脚本来做到这一点?也许制作一个不需要通过“java”命令调用的可执行文件?

【问题讨论】:

    标签: java scripting executable


    【解决方案1】:

    你可以create a shell script那个accepts arguments。在你的 shell 脚本中,它看起来像这样:-

    java YourApp $1 $2
    

    在这种情况下,YourApp 接受两个参数。如果你的shell脚本叫做app.sh,你可以这样执行:-

    ./app.sh FirstArgument SecondArgument 
    

    【讨论】:

    • 不幸的是,如果使用带引号的参数调用包装脚本,这将中断;例如包含空格的路径名。它需要在$1$2 等周围加上双引号
    【解决方案2】:

    假设您使用的是与 Bourne shell 兼容的 shell;例如sh、bash、ksh 等,以下包装器会将所有命令行参数传递给 java 命令:

    #!/bin/sh
    OPTS=... 
    java $OPTS com.example.YourApp "$@"
    

    $@ 扩展为 shell 脚本的其余参数,并且在其周围加上引号会导致参数被单独引用,因此以下代码会将单个参数传递给 Java:

    $ wrapper "/home/person/Stupid Directory Name/foo.txt" 
    

    如果没有包装脚本中 "$@" 周围的双引号,Java 将接收上述三个参数。


    请注意,这不适用于"$*"。根据bash手动输入:

    "$*" 等价于"$1c$2c...",其中cIFS 变量值的第一个字符。

    换句话说,所有的 shell 参数将被连接成一个用于 Java 应用程序的命令参数,而忽略原来的单词边界。

    请参阅 bashsh 手册 ... 或 POSIX shell 规范 ... 了解有关 shell 如何处理引用的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 2020-12-31
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多