我目前正在从 GUI 按钮执行 csh shell 脚本。该脚本最初调用另一个 sql 脚本从数据库中选择信息并将其输出到 tmp 目录中的日志文件中。我现在需要 CAT 那个文件并在 xterm 窗口上显示它。我使用 javaRuntime.exec()
方法来执行命令,我想我有两个可以使用的选项
- 重定向 std 输出以在 xterm 上显示它
- 使用 csh 脚本从日志文件中读取并将其输出到 xterm
所以我选择了选项 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,我很困惑如何使用 streamreader 来添加它