命令是否从shell脚本的当前目录运行?

bash shell脚本中,我尝试了这两个版本:

java -jar abc.jar& 

 CMD="java -jar abc.jar&" $CMD 

第一个版本工作,第二个版本抱怨找不到abc.jar。 为什么?

命令从shell脚本中的当前目录运行。

这就是为什么测试脚本中的第一个命令起作用。

第二个命令可能无法正常工作,因为java不在${PATH}或者abc.jar不在${CLASSPATH} 。 你可以echo这些环境变量或者set +x来调试你的bash脚本。

Bash(和其他人)不会让你在一个变量的值内做背景( & ),也不会让你做重定向或管道。 您应该避免将命令放入变量。 有关其他信息,请参阅BashFAQ / 050 。

什么是你得到的实际错误信息? 我敢打赌,这就像“abc.jar&找不到”(注意&符号),因为&符号被视为文件名中的字符。

此外,脚本的当前目录是从中运行的目录 – 而不是它所在的目录。 你应该明确你想要你的文件的目录。

 java -jar /path/to/abc.jar&