UNIX:java程序命令从终端运行,但不从bash脚本运行
这个命令在终端$java-jar$picard中非常有效 每当我将其放入bash脚本中时,它都会给出错误:第2行:-jar:command not found 是否有任何修正,谢谢?行开头的$不是命令的一部分;它是shell提示符的一部分 将命令放入批处理文件时,不应包含shell提示符。因此,将其更改为:UNIX:java程序命令从终端运行,但不从bash脚本运行,java,unix,Java,Unix,这个命令在终端$java-jar$picard中非常有效 每当我将其放入bash脚本中时,它都会给出错误:第2行:-jar:command not found 是否有任何修正,谢谢?行开头的$不是命令的一部分;它是shell提示符的一部分 将命令放入批处理文件时,不应包含shell提示符。因此,将其更改为: #!/bin/sh java -jar $picard 编辑 OP提到,$java指向实际的java二进制文件 如果您遵循的是$java和$picard,那么它们是shell中的局部变量,
#!/bin/sh
java -jar $picard
编辑
OP提到,$java指向实际的java二进制文件
如果您遵循的是$java和$picard,那么它们是shell中的局部变量,而不是环境变量,所以它们不会传递到您调用的任何命令上
要将它们转换为环境变量,需要从shell中导出它们。无论在何处设置值,都是最好的放置位置:
export java
export picard
但是,这会将它们转换为环境变量,在这种情况下,您应该将名称改为all capitals->JAVA,PICARD。行开头的$不是命令的一部分;它是shell提示符的一部分
将命令放入批处理文件时,不应包含shell提示符。因此,将其更改为:
#!/bin/sh
java -jar $picard
编辑
OP提到,$java指向实际的java二进制文件
如果您遵循的是$java和$picard,那么它们是shell中的局部变量,而不是环境变量,所以它们不会传递到您调用的任何命令上
要将它们转换为环境变量,需要从shell中导出它们。无论在何处设置值,都是最好的放置位置:
export java
export picard
但是,这会将它们转换为环境变量,在这种情况下,您应该将名称改为all capitals->JAVA,PICARD。您必须导出用于指向JAVA路径的JAVA变量,如下所示 JAVA_CLASSPATH=/bin/jre1.8.0_101/bin/JAVA 导出PICARD_CLASSPATH=/bin/PICARD-tools-2.5.0/PICARD.jar $JAVA_CLASSPATH-CLASSPATH$PICARD_CLASSPATH{n执行开始的类的名称}
您可以使用大写字母,而不是小写字母,这样更易于阅读。您必须导出用于指向java路径的java变量,如下所示 JAVA_CLASSPATH=/bin/jre1.8.0_101/bin/JAVA 导出PICARD_CLASSPATH=/bin/PICARD-tools-2.5.0/PICARD.jar $JAVA_CLASSPATH-CLASSPATH$PICARD_CLASSPATH{n执行开始的类的名称}
不使用小写,您可以使用大写字母,这样更容易阅读。实际上,$java是一个目录:/bin/jre1.8.0_101/bin/java,$picard是/bin/picard-tools-2.5.0/picard.jar实际上,$java是一个目录:/bin/jre1.8.0_101/bin/java和$picard是/bin/picard-tools-2.5.0/picard.jar java-jar选项的一个主要特性是您不在命令中指定主类的名称,而是来自jar中的清单。另外,使用名称JAVA_CLASSPATH作为指定单个可执行文件的变量对人类来说是非常容易误导和混淆的,尽管shell并不在意。我假设picard是一个库,他正在使用它来执行一些JAVA类。JAVA-jar选项的一个主要特征是,您没有在命令中指定主类的名称,相反,它来自jar中的清单。另外,使用名称JAVA_CLASSPATH作为指定单个可执行文件的变量对人类来说是非常容易误导和混淆的,尽管shell并不在意。我假设picard是一个库,他正在使用它来执行一些JAVA类。