2017-02-25 3 views
0
#!/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 

によって$ JAVA_HOMEを取得するにはどうすればよい私はJSCHに、リモートマシン上でこのスクリプトを実行する:は私がJSCH

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; 
     } 

結果は、このshスクリプトは、JAVA_HOMEの値を取得することができないことを示しています。

JAVA_HOME= 
JAVA_HOME= 
/bin/java -jar xxxxx 

私たちはリモートマッチンンのconfを取得しないため、JAVA_HOMEを指摘できません。

+0

あなたは対話型のSSHターミナルでスクリプトを実行するときに、異なる結果を得るのですか? –

答えて

0

我々は、非対話型および非ログインシェルを取得し、スクリプトにこのコードを挿入することができます。

#!/bin/bash . /etc/profile . ~/.profile

非対話型および非ログインシェルに見つけ、ロードしないだろう」 BASH_ENV "。ファイルの読み込みの違いを示す画像があります。

enter image description here

+0

これは、あなたの質問? –

+0

@Martin Prikrylハイ・マーティン・プリクリル、それは私の解決策です。一部の人には便利かもしれません。 –

0

OSにJAVA_HOME変数を設定する必要があります。やってみました?

+0

これはコメントだったはずです –

0

リモートマシンがリモート環境で$ JAVA_HOMEを設定していない場合、リモートマシンが取得すると(明らかに)空になります。だから、

いずれか、以下を行う必要があります。

  • 適切なの$ JAVA_HOMEを設定するには、リモートマシンのリモートシェルの初期設定の変更、または
  • を適切な$を実行しているスクリプトで設定JAVA_HOME、または
  • を渡します
  • 適切な$ JAVA_HOME設定を「intuit」できる巧妙なシェル関数を作成します。例えばJRE にインストールされている可能性があるさまざまな場所を見てください。
+0

Stephen C.ありがとうございました。あなたが言ったように、私たちは/ etc/profileのパスに$ JAVA_HOMEを設定しました。私の質問では、sshログインモードが問題の原因です。私たちはこれからいくつかの情報を見つけることができます:[link](http://askubuntu.com/questions/155865/what-are-login-and-non-login-shells) –

+0

"対話型ログインシェルとして呼び出されると、非対話シェルを-loginオプションとともに使用すると、最初に/ etc/profileおよび〜/ .profileからコマンドを読み込んで実行しようとします。この動作を禁止するには、-noprofileオプションを使用します。 shという名前の対話型シェルとして起動されると、bashは変数ENVを探し、定義されていればその値を展開します。 " - bashシェルについて学ぶ、第2版 –