java - 每次使用特定参数启动 Java

标签 java bash

我有一个程序允许我定义 java 可执行文件 (/usr/bin/java),但不允许我向可执行文件添加特定参数。

我希望每次都能够使用特定参数运行 Java 以启用安全管理器。

到目前为止,我已经尝试在/usr/bin/java 之后添加参数,所以它看起来像

java=/usr/bin/java -Djava.security.manager -Djava.security.policy=/home/java.policy

这不起作用,因为程序可能会检查文件是否存在。我尝试的另一种方法是制作一个名为 java 的 bash 脚本,其中包含:

/usr/bin/java -Djava.security.manager -Djava.security.policy=/home/java.policy $*

然后我将 java 路径设置为 /home/java(我的脚本的位置)。然而,这也不起作用。有什么方法可以做到这一点吗?

谢谢。

最佳答案

将您的 java 调用放入 shell 脚本 java.sh:

#!/bin/bash

/usr/bin/java -Djava.security.manager -Djava.security.policy=/home/java.policy $@

使用 chmod u+x java.sh 更改权限,然后使用 java=./java.sh 调用您的程序(根据需要调整脚本的路径)。

关于可执行位和 shebang 行的注释

shebang 行 (#!/bin/bash) 和执行权限在这里都很重要。没有它们,exec* 系列的系统调用将失败,因为内核不知道如何处理该文件,或者由于缺少可执行位而导致执行被拒绝。

这在直接从 shell (./java.sh) 运行时是不同的,因为大多数 shell 具有针对这种情况的一些兼容性特性,因此如果 它们将在 shell 中运行脚本exec* 失败。但是必须设置执行权限。

唯一不需要两者的情况是将脚本作为 shell 的参数:bash java.sh

关于java - 每次使用特定参数启动 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721262/

相关文章:

java - 如何在用户输入时在 EditText 中添加主题标签

linux - 对列表进行排序,以小写字母优先

bash - 从 ls 到 rsync 的管道输出

linux - 转换-追加*网格

bash - 不要在多个 bash 脚本中显示 pushd/popd 堆栈(安静的 pushd/popd)

linux - 查找命令以列出在 bash 脚本中不起作用的符号链接(symbolic link)文件

java - Intellij IDEA。即使项目未编译也运行单元测试

java - 通过正则表达式匹配csv文件中的空行

java - 单元测试和太多模拟

带有对象的 Javafx 可编辑组合框