0

現在、GUI ボタン​​から csh シェル スクリプトを実行しています。このスクリプトは、最初は別の SQL スクリプトを呼び出して、データベースから情報を選択し、それを tmp ディレクトリのログ ファイルに出力します。次に、そのファイルを CAT して xterm ウィンドウに表示する必要があります。コマンドを実行するためにJavaRuntime.exec()メソッドを使用していますが、使用できるオプションが2つあると考えました

  1. std 出力をリダイレクトして xterm に表示する
  2. csh スクリプトを使用してログ ファイルから読み取り、xterm に ouytput します。

したがって、オプション 2 を選択しましたが、csh スクリプトで単純な hello world を出力することさえできません。つまり、netbeans から実行すると、画面に何も出力できません。xterm から直接スクリプトを実行しようとすると、動作します。ここにスクリプトコードがあります

#!/bin/csh -f



#set MYSQL=${MYSQL_HOME}/mysql
#set PSQL=${PSQL_HOME}/psql

echo "Hello World"

#set      REPORT=${CLEADM_HOME}/Scripts/DataValidation/CLEADM_EarthOrientationParametersDataReport.sql


#${REPORT}

#${PSQL} ${CLEDBUSER}<${REPORT} 

#Get the number of lines in the report file for scrollbar control
#set lc='wc -l /tmp/results.log'
#echo $lc

結果を画面に出力 (エコー) できるかどうかを確認するためだけにすべてをコメントアウトしましたが、それは機能しません。xterm から直接実行すると ( ~/.mysqlconnection.csh)、動作しているようで、"Hello World" が出力されます。何が悪いのかわかりません。そこで、スクリプトの先頭にこのコードを追加して、端末を強制的に起動しようとしました

/usr/openwin/bin/XTERM \    this opens up the xterm but leaves it frozen for some reason? now i cant access anything on my computer

以下は、Java ボタンから csh スクリプトを実行するために使用するコードです。ボタンの背後でこのメソッドを呼び出します

public class RunShellScript {

public static void runShellScript (String unixCommand) 
{
 try {
     Runtime runtime=Runtime.getRuntime();
     Process process=runtime.exec(new String [] { "/bin/csh", "-c", unixCommand});

     InputStream stderr=process.getErrorStream();
     InputStreamReader isr=new InputStreamReader (stderr);
     BufferedReader br=new BufferedReader (isr);
     String line=null;
     System.out.println("<ERROR>");


     while((line=br.readLine())!=null)
         System.out.println(line);

     System.out.println(line);
     int exitVal=process.waitFor();
     System.out.println("Process exitValue:" + exitVal);
 }
 catch (Throwable t)
 {
     t.printStackTrace();
 }

どこかで出力をextermにリダイレクトする必要があり、ストリームリーダーを使用してそれをドープする方法について混乱しています

4

1 に答える 1

1

編集-私は要件をひどく誤解していたので、私は完全に私の答えからやり直しています。

ユーザーがボタンを押すたびに新しいウィンドウが必要な場合は、cshスクリプトからxtermを開くと機能するはずです。これを試して:

/usr/openwin/bin/xterm -e "bash -c 'cat /tmp/results.log; echo press a key to continue; read'" &

いつまでも開いたままで、ユーザーがボタンを押すたびに新しい結果で更新され続ける1つのウィンドウが必要な場合は、少し異なります。Javaから他のウィンドウを生成してみます。別のJavaウィンドウ/フレームを使用するか、別のxtermを使用することができます。別のxtermを使用するにはProcess、次のようになんらかの方法で実行してみてください。

new ProcessBuilder("/usr/openwin/bin/xterm","-e","tail -f /tmp/results.log").start();

tail -fこれにより、ファイルに対するコマンドが開きresults.log、ログファイルに追加したすべてのものがxtermに表示されます。

于 2012-08-06T16:38:27.727 に答える