如何将参数从包装器 shell 脚本传递到 Java 应用程序?

2022-09-01 20:14:23

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

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


答案 1

假设您使用的是与 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 应用程序的单个命令参数中,而忽略原始单词边界。

请参阅或手动...或 POSIX 外壳规格 ...有关 shell 如何处理引用的详细信息。bashsh


答案 2

您可以创建一个接受参数的 shell 脚本。在您的 shell 脚本中,它看起来像这样: -

java YourApp $1 $2

在本例中,接受两个参数。如果你的 shell 脚本被调用,你可以像这样执行它:-YourAppapp.sh

./app.sh FirstArgument SecondArgument 

推荐