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