将复杂命令放入变量并将其作为参数传递给另一个脚本以便稍后运行

时间:2014-11-03 18:59:08

标签: java linux shell escaping

我有运行java二进制文件的脚本,想要传递将在OutOfMemoryException发生时执行的复杂命令。问题比较笼统,与OOME无关。如何将命令放在变量中并将其传递给稍后将执行的其他脚本? 这是我试图执行的代码。我尝试了不同的转义选项,但没有任何结果。在执行期间,shell尝试在空格上拆分JAVA_OPTS,无论我如何逃避它。     #!/ bin / sh的

JAVA_OPTS="-Xmx10m"
JAVA_OPTS="$JAVA_OPTS \"-XX:OnOutOfMemoryError=echo 'Ups'\""

set -x
java $JAVA_OPTS TestMemory

我发现了这个:BashFAQ 050,但所涵盖的案例都不适用于我。我无法将此代码放在函数中,因为JVM进程无法访问它。 当我将整个命令作为一行时,它运行良好,但我的用例有点不同,我无法修改最后一行。 JAVA_OPTS应该在其他地方构建,然后如示例代码所示使用。

2 个答案:

答案 0 :(得分:0)

唯一明智的做法是使用bash数组(或ksh / zsh)

JAVA_OPTS=( "-Xmx10m" )
JAVA_OPTS+=( "-XX:OnOutOfMemoryError=echo 'Ups'" )

set -x
java "${JAVA_OPTS[@]}" TestMemory

答案 1 :(得分:-1)

试试这个

JAVA_OPTS="-Xmx10m"
read JAVA_OPTS<<eod
$JAVA_OPTS "-XX:OnOutOfMemoryError=echo 'Ups'
eod

set -x
java $JAVA_OPTS TestMemory
# you may need to change it slightly