2017-07-27 9 views
0

こんにちは私は、BATファイルとshファイルの両方で実行できるJARファイルを持っています。 JAR内では、JARがbatファイルかshファイルのどちらで実行されたかを追跡する変数フラグが必要です。 stackoverflowの周りを見たが、同様のトピックを見つけることができませんでした。それは可能ですか?ありがとう。JARファイルがJAVAのshスクリプトまたはbatスクリプトによって実行されているかどうかを確認する方法

+0

私はあなたがしたいとしますWindowsマシンでこれをチェックしますか? UNIX上では 'bat'を実行することはできません(UNIXではbash以外のシェルもあります)。 – npocmaka

+1

実行中のスクリプトの種類だけを使用しているマシンは関係ありません。 Windows用のバットとsh、Linux用のshです。 – olliejjc16

+1

プラットフォームによって異なります。 Windowsはbatファイルをサポートしています。 UNIXとフレンドはshファイルをサポートしています。アプリケーションとの違いは何ですか? – EJP

答えて

0

これは問題ではありません。あなたがバットやシュートで環境変数を設定する(あなたのjarが始まる直前)、それは他のserviseが同じ名前のveriableを設定することはありそうにないので、非常に具体的です(あるいは変数の特定の値を考える)。あなたのコードでは、あなたのコードがどこから始まったのかを検出できるように変数を読んでください。

詳細をチェックアウトhere

0

は、Javaの親プロセスを取得し、it.The最も簡単な方法は、(それが窓からデフォルトでインストールされる7/Server 2008の)PowerShellを使用しているチェックする必要があります:

public static void main(String[] args){ 
    if (System.getProperty("os.name").toLowerCase().contains("windows")){ 
     String pid=ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; 
     System.out.println(pid); 
     String pscommand="powershell $pp=(gwmi win32_process|Where-Object {$_.ProcessId -eq "+pid+"}).ParentProcessId;(gwmi win32_process |Where-Object {$_.ProcessId -eq $pp}).Caption"; 
     Process powerShellProcess; 
     int exitCode=0; 
     String shell=""; 

     try { 
      powerShellProcess = Runtime.getRuntime().exec(pscommand); 

      BufferedReader stdInput = new BufferedReader(new 
        InputStreamReader(powerShellProcess.getInputStream())); 

      //BufferedReader stdError = new BufferedReader(new 
      //  InputStreamReader(powerShellProcess.getErrorStream())); 

      String s = stdInput.readLine(); 
      System.out.println(s); 
      if(s.toLowerCase().equals("cmd.exe")){ 
       System.out.println("called from batch or cmd.exe directly"); 
      } else if (s.toLowerCase().equals("bash.exe")){ 
       System.out.println("called from bash.exe or .sh script"); 
      } else { 
       System.out.println("called from smething else"); 
      } 

      powerShellProcess.getOutputStream().close(); 
      powerShellProcess.getInputStream().close(); 
      powerShellProcess.getErrorStream().close(); 
      exitCode=powerShellProcess.waitFor(); 
      System.out.println("Exit code from getting shell type: "+exitCode); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
関連する問題