【问题标题】:Linux shell script for calling Java program with arguments用于调用带参数的 Java 程序的 Linux shell 脚本
【发布时间】:2015-11-22 00:38:48
【问题描述】:

我有一个在 linux 机器中作为服务运行的 java 程序。我有具有以下行的 shell 脚本文件来启动程序。

$EXEC -home "$JAVA_HOME" -cp "$CLASS_PATH" -outfile "$LOG_OUT" -errfile "$LOG_ERR" -pidfile "$PID" $1 $CLASS 

$CLASS_PATH has class path
$CLASS has the name of main class
EXEC="/usr/bin/jsvc"

我可以使用以下命令启动和停止服务

  • 服务 myscriptfilename 启动

  • 服务 myscriptfilename 停止

现在我在我的程序中添加了一个名为“myflag”的新参数。它在 windows box 上运行良好。现在我很难使用 shell 脚本将新参数传递给我的 linux 机器上的程序。

现在我开始我的服务了

  • service myscriptfilename start myflag

我可以在 shell 脚本中使用 $2 来获取 myflag 的值。我想弄清楚如何将它传递给我的程序

如何在下一行中将我的“myflag”从 shell 脚本传递给我的程序?

$EXEC -home "$JAVA_HOME" -cp "$CLASS_PATH" -outfile "$LOG_OUT" -errfile "$LOG_ERR" -pidfile "$PID" $1 $CLASS

【问题讨论】:

  • 你在问this吗?
  • 我可以在 shell 脚本中使用 $2 获取 myflag 的值。我想弄清楚如何将它传递给我的程序?
  • 谁知道你的程序如何解析命令行参数。没有公认的标准,所以可能有一百万种方法。毕竟它是你的程序,你应该比我们更了解......(就此而言,你甚至没有说$EXEC是什么;也许所有Java程序员都知道它?我是不确定。)
  • 我正在寻找 args[0]。它在 windows 框中工作正常。我不确定在 linux 中的何处传递该参数

标签: java linux bash shell


【解决方案1】:

我正在考虑 $EXEC 是 java 可执行文件,$1 是你的 JAR,$CLASS 是你的主类。在这种情况下,只需将 ${@:2} 附加到行尾即可:

$EXEC -home "$JAVA_HOME" -cp "$CLASS_PATH" -outfile "$LOG_OUT" -errfile "$LOG_ERR" -pidfile "$PID" $1 $CLASS ${@:2}

【讨论】:

  • EXEC="/usr/bin/jsvc" and $1=start from the command service myscriptfilename start myflag
  • 应该可以工作 - 它有类似的execution options
  • @KennerDev,你能调查一下哪个部分不起作用吗?你试过用myflag替换${@:2}吗?有两个地方可能不会传递您的参数:service startjsvc ...。尝试确定其中哪些不起作用。
  • 它在jsvc级别。它在服务启动时传递。
  • @KennerDev,您是通过DaemonContext 检索它们吗?
猜你喜欢
  • 2018-12-27
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 2022-10-20
  • 2013-09-01
  • 2011-09-27
  • 2014-12-09
相关资源
最近更新 更多