「with or without quota」

  CREATED BY JENKINSBOT

定义了一个SHELL函数:

ddPATH=”-cp /mnt/demo”

debug=com.k4nz.Enter

debug()

{
java $ddPATH “$USER_FLAGS” $debug
}

而USER_FLAGS使用用户自定义的,可能存在,也可能不存在。在执行这个函数的时候会产生如下错误:

Error: Could not find or load main class

我们尝试打印出要执行的命令,所以对函数作出如下修改,加了一个echo命令:

ddPATH=”-cp /mnt/demo”

debug=com.k4nz.Enter

debug()

{
echo java $ddPATH “$USER_FLAGS” $debug
}

该函数的输入如下:

java -cp /mnt/demo com.k4nz.Enter

在命令行里执行这个命令是没有错误,完全可以正常执行这个类,这就见鬼了。

问题原因

其实,有的时候就是需要非常仔细的观察,问题的关键就在于那个”$USER_FLAGS”,修改成$USER_FLAGS就正常了。为什么?

由于USER_FLAGS未定义,函数里的java $ddPATH “$USER_FLAGS” $debug命令执行前,SHELL会先进行解析,而解析的结果是java -cp /mnt/demo “” com.k4nz.Enter,而echo的结果是java -cp /mnt/demo com.k4nz.Enter,这两个并不等价。而当我们把函数里的命令修改成java $ddPATH $USER_FLAGS $debug后,解析的结果就与echo等价了,这时候也不会出现那个错误了。