Linux终端:如何将参数传递给另一个参数

时间:2011-08-05 06:07:24

标签: java linux terminal command-line-arguments

我有一个在特殊环境中运行其他程序的系统程序: 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

3 个答案:

答案 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)

subshel​​l $()似乎比使用shell替换的反引号更好 (在内部运行命令并返回stdout)

了解更多信息,请参阅

http://tldp.org/LDP/abs/html/commandsub.html