如何通过Jsch获得$JAVA_回家

如何通过Jsch获得$JAVA_回家,java,jsch,Java,Jsch,我想在jsch中的远程计算机上执行此脚本: #!/bin/sh export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)))) echo JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)))) echo JAVA_HOME=$JAVA_HOME ${JAVA_HOME}/bin/java -jar xxxxx 结果表明,该sh脚本无法获得JAVA_HOM

我想在jsch中的远程计算机上执行此脚本:

#!/bin/sh
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))
echo JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))
echo JAVA_HOME=$JAVA_HOME
${JAVA_HOME}/bin/java -jar xxxxx
结果表明,该sh脚本无法获得JAVA_HOME的值

public boolean actionShell(Session sshSession, String command) {
        boolean flag = false;
        Channel channel = null;
            try {
            channel = sshSession.openChannel("exec");
            ((ChannelExec) channel).setCommand(command);
            channel.setInputStream(null);
            ((ChannelExec) channel).setErrStream(System.err);
            InputStream in = channel.getInputStream();
            channel.connect();

            while (true) {
                 if (channel.isClosed()) {
                     if (in.available() > 0) continue;
                         flag = channel.getExitStatus() == 0 ? true : false;
                         log.info("exit-status: " + flag);
                         break;
                     }
                     Thread.sleep(1000);
                }
            } catch (Exception e) {
                log.error("error", e.getMessage());
            } finally {
                if (channel != null || channel.isConnected())
                    channel.disconnect();
            }
            return flag;
        }

因为我们没有得到远程匹配的配置,我们不能指出JAVA\u HOME。

我想你应该在你的操作系统上设置JAVA\u HOME变量。您试过了吗?

如果远程计算机没有在远程环境中设置$JAVA\u HOME,那么(显然)当您得到它时,它将是空的

因此,您需要:

  • 更改远程计算机的远程shell初始化以设置适当的$JAVA_HOME,或
  • 在正在运行的脚本中传递适当的$JAVA_HOME设置,或
  • 编写一个聪明的shell函数,可以“直觉地”设置适当的$JAVA_主页;e、 g.查看可能安装JRE的各个地方
我们可以获得一个非交互式和非登录shell,并在脚本中插入此代码:

#/bin/bash
. /等/简介
. ~/.个人资料

非交互式和非登录shell将无法查找和加载“BASH_ENV”。有一个图像显示文件加载的差异


Jsch的会话环境没有/etc/profile配置。。。您可以在加载配置之前执行[
source/etc/profile;
]。然后,您可以成功地执行任何应用程序……

这应该是一个注释。当您在交互式SSH终端中执行脚本时,您会得到不同的结果吗?感谢yon Stephen C。正如您所说,我们已经在/etc/profile路径中设置了$JAVA_HOME。在我的问题中,ssh登录模式是问题的原因。我们可以从以下网站找到一些信息:“当作为交互式登录shell或带有–login选项的非交互式shell调用时,它首先尝试按照该顺序从/etc/profile和~/.profile读取和执行命令。可以使用–noprofile选项来禁止此行为。当作为名为sh的交互式shell调用时,bash会查找变量ENV,exp和它的价值,如果它被定义的话,“-学习bash Shell,第二版这意味着对你的问题的回答或补充信息吗?@Martin Prikryl Hi Martin Prikryl,这是我的解决方案。可能对一些人有用。
JAVA_HOME=
JAVA_HOME=
/bin/java -jar xxxxx