我有一个在特殊环境中运行其他程序的系统程序:
cset shield -e PROGRAM
。现在要运行一个java程序,我键入了cset shield -e java PROGRAM
,但这不起作用。事实证明,我必须指定java
的完整路径。但是,PATH
已设置,因此其java PROGRAM
工作正常。有没有更简单的方法呢?
另外,我的另一个java程序需要外部库并且可以自行运行。但是对于cset shield
,我得到了NoClassDefFoundError
,这意味着它无法找到库。添加classpath参数(-cp CLASSPATH
)会导致错误消息"p" contains invalid characters: p
。
在尝试了各种建议及其排列之后,我找到了一种半成品:cset shield --exec -- $(which java) -cp ./:<LIB_PATH>/DA_LIB.jar PROGRAM
。但有了这个,我得到了UnsatisfiedLinkError: Library not found: DA_LIB
答案 0 :(得分:1)
您可以尝试which
找到java:
cset shield -e $(which java) PROGRAM
这将在特殊环境下运行java,而不是在子shell中运行。 (which
显然会在子shell中运行。
修复CLASSPATH
问题:我无法在此测试,但你可能会尝试这个:
cset shield -e "$(which java) -cp <CLASSPATH> PROGRAM"
其中<CLASSPATH>
需要替换为实际的类路径。
答案 1 :(得分:0)
您是否尝试过以下操作?
cset shield -e `java PROGRAM`
答案 2 :(得分:0)
cset shield -e $(java PROGRAM)
subshell $()似乎比使用shell替换的反引号更好 (在内部运行命令并返回stdout)
了解更多信息,请参阅