В настоящее время я выполняю сценарий оболочки csh с помощью кнопки графического интерфейса. Первоначально сценарий вызывает другой сценарий sql для выбора информации из базы данных и вывода ее в файл журнала в каталоге tmp. Теперь мне нужно преобразовать этот файл в CAT и отобразить его в окне xterm. Я использую метод java Runtime.exec()
для выполнения команды, и я решил, что у меня есть два варианта, которые я могу использовать.
- Перенаправьте стандартный вывод, чтобы показать его на xterm
- Чтение из файла журнала с помощью сценария csh и вывод в xterm
Поэтому я выбрал вариант 2, и я даже не могу заставить скрипт csh выводить простой привет, мир, что означает, что я не могу ничего вывести на экран, когда запускаю его из 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
ниже приведен код, который я использую для выполнения сценария csh с помощью кнопки java. я вызываю этот метод за кнопкой
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