Java Shell脚本:如何将绝对路径放入命令?

Java Shell脚本:如何将绝对路径放入命令?,java,shell,Java,Shell,我试图通过shell脚本执行我的java程序,因此我写道: java -jar $(pwd)"/test.jar" 它工作得完美无瑕,但当我转向下面的代码时: PATH=$(pwd)"/test.jar"' java -jar $PATH 然后我得到一个错误:“Run.sh:3:java:notfound” (在Ubuntu上运行) 我在shell脚本方面的经验很少,所以请让我知道它有什么问题。谢谢。PATH是一个特殊的环境变量,shell使用它来查找可执行文件。您已将路径更改为指向test

我试图通过shell脚本执行我的java程序,因此我写道:

java -jar $(pwd)"/test.jar"
它工作得完美无瑕,但当我转向下面的代码时:

PATH=$(pwd)"/test.jar"'
java -jar $PATH
然后我得到一个错误:“Run.sh:3:java:notfound” (在Ubuntu上运行)


我在shell脚本方面的经验很少,所以请让我知道它有什么问题。谢谢。

PATH是一个特殊的环境变量,shell使用它来查找可执行文件。您已将路径更改为指向test.jar,因此现在shell无法找到
java

将变量称为其他变量

例如:

LIB_PATH="$(pwd)/test.jar"
java -jar ${LIB_PATH}

PATH
是一个特殊的环境变量,shell使用它来查找可执行文件。您已将路径更改为指向test.jar,因此现在shell无法找到
java

将变量称为其他变量

例如:

LIB_PATH="$(pwd)/test.jar"
java -jar ${LIB_PATH}

$(PWD)中的值取决于调用脚本的目录(打印工作目录)。如果您从jar文件所在的目录之外的另一个目录调用脚本,您将得到错误的路径。您更改了SHELL的搜索路径,这将阻止SHELL查找任何其他二进制文件,例如java。

美元中的值(PWD)取决于调用脚本的目录(打印工作目录)。如果您从jar文件所在的目录之外的另一个目录调用脚本,您将得到错误的路径。您更改了SHELL的搜索路径,这将阻止SHELL查找任何其他二进制文件,例如java。

路径是系统保留变量,它定义了系统查找可执行文件的方式(在您的示例中是java)。因此,您不应该在代码中将其用作test.jar的变量

在我看来,您的代码应该是这样的:

#!/bin/sh

PROGPATH='/path/to/your/test.jar'
JAVAEXEC=`which java`
JAVAPARAMS='-j'

GLOBALPATH="$JAVAEXEC $JAVAPARAMS $PROGPATH"
echo $GLOBALPATH

PATH是系统保留变量,它定义了系统查找可执行文件的方式(在java中)。因此,您不应该在代码中将其用作test.jar的变量

在我看来,您的代码应该是这样的:

#!/bin/sh

PROGPATH='/path/to/your/test.jar'
JAVAEXEC=`which java`
JAVAPARAMS='-j'

GLOBALPATH="$JAVAEXEC $JAVAPARAMS $PROGPATH"
echo $GLOBALPATH

+1但是既然我们讨论的是环境变量,那么最好使用$PWD而不是调用外部二进制+1,但是既然我们讨论的是环境变量,与其调用外部二进制文件,不如使用$PWD。问题是他的shell不再知道那里有
java
二进制文件,因为他重写了用于查找它的
PATH
变量。问题是他的shell不再知道那里有
java
二进制文件,因为他重写了
PATH
它用来查找它的变量。