【问题标题】:Pass java main methods arguments from shell script input从 shell 脚本输入传递 java main 方法参数
【发布时间】:2019-01-25 22:24:21
【问题描述】:

我已经实现了一个聊天服务器客户端。我编写了以下 shell 脚本来动态获取服务器端口号:server.sh

javac -类路径。 com/chat/ChatConstants.java

javac -类路径。 com/chat/ChatServer.java

echo 输入服务器端口号

读取 $1

java com.chat.ChatServer $1

这是我试图将参数传递给的 java main 方法:

public static void main(String args[]) {
    // The default port number.
    int portNumber = 8888;
    if (args.length < 1) {
        System.out.println("Chat server is up on " + portNumber);
    } else {
        portNumber = Integer.valueOf(args[0]).intValue();
        System.out.println("Chat server is up on " + portNumber);
    }
   }

但是,打印的端口号始终是默认端口,即8888。当我运行java程序时,如下所示

java com.chat.ChatServer 2727

cmd line args被正确获取,服务器端口设置为2727。

我似乎在 shell 脚本中做错了什么。我什至尝试用引号传递参数,如下所示:

java com.chat.ChatServer "$1"

命令提示符立即关闭。

请帮忙

【问题讨论】:

  • 不要将变量命名为$1。这在 shell 中已经有了意义。
  • $1这一行理论上是不需要的,$1指的是default的第一个参数。

标签: java shell sh command-line-arguments


【解决方案1】:

你的脚本应该是:

read PORT
java com.chat.ChatServer $PORT

【讨论】:

    【解决方案2】:

    $1 是一个特殊变量,它保存传递给 shell 脚本的第一个命令行参数。

    您需要将read 输入到不同的变量中。

    编辑: 只是一个旁注,您可以使用read -p "Enter server port number" P 在不使用echo 的情况下打印提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-27
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2017-01-22
      • 2016-03-20
      • 2023-03-06
      相关资源
      最近更新 更多