如何将参数从包装外壳脚本传递给Java应用程序?
问题内容:
我想运行在命令行(Linux和Mac)上创建的Java程序。我不想一直输入“
java”和参数,因此我正在考虑创建包装器脚本。使它们无处不在的最佳方法是什么?我也希望能够传递参数。我当时正在考虑使用“
shift”执行此操作(删除第一个参数)。
有没有一种更好的方法可以完全不使用脚本呢?也许制作一个不需要通过“ java”命令调用的可执行文件?
问题答案:
假设您使用的是与Bourne外壳兼容的外壳;例如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..."
,其中c
是IFS
变量值的第一个字符。
换句话说,所有shell参数将被合并为Java应用程序的单个命令参数,而忽略原始单词边界。
有关外壳如何处理引用的更多信息,请参考bash
或sh
手册…或POSIX Shell规范…。