【发布时间】:2012-08-03 19:07:27
【问题描述】:
我有一个从 Java GUI 运行的脚本。它执行 SQL 脚本并将结果写入 tmp 目录中的日志文件。脚本的其余部分应该打开一个 xterm 并将输出文件的结果显示到屏幕上。它会按预期创建日志文件,并且还会打开一个 xterm。唯一的问题是它在那之后冻结了,我必须再次重新启动整个过程。这是我用来打开 xterm 的脚本示例
#!/bin/csh -f
#set MYSQL=${MYSQL_HOME}/mysql
set PSQL=${PSQL_HOME}/psql
set MORE=/usr/xpg4/bin/more
set REPORT=/h/Scripts/DataValidation/ParametersDataReport.sql
#${REPORT}
${PSQL} ${USER}<${REPORT}
#Get the number of lines in the report file for scrollbar control
#set lc='wc -l /tmp/results.log'
#echo $lc
#Open an extra terminal
set title="EARTH ORIENTATION PARAMETERS REPORT"
/usr/openwin/bin/xterm -T "$title" \
-bg lightblue -fg black -sb -sl 2000 -ut -e ${MORE} \
-f /h/USERS/Pablito/results.log \
exit
MORE 和title 在脚本文件中定义为变量。为什么我的脚本崩溃并导致终端挂断?这可能是分段错误吗?
我通过 ssh 连接来完成这一切。我查看了发出的命令,这就是它所说的:
/usr/openwin/bin/xterm -sb -ls -display@d&@;
我在终端上输入了这个命令,结果显示得很好。为什么我不能从 GUI 执行此操作?
/usr/openwin/bin/xterm -T EARTHORIENTATIONPARAMETER -geometry 104x50+0+80 -bg lightblue -fg black -sb -sl 2000 -ut -e /usr/xpg4/bin/more -f /tmp/results.log
当我尝试使用 GUI 时,它只是冻结在我身上(意味着我无法访问 GUI 或终端)。它还包含一个错误
bg: Command not found
在启动 GUI 的终端上。
我想我真正应该问的是如何在 csh 脚本中执行以下命令,因为当我从终端手动输入时,它会产生预期的效果
xterm -T "EarthOrientation Parameter" -geom 104x50+0+80 -bg pink -fg black -sb -sl 2000 -ut -e /usr/xpg4/bin/more -f /h/USERS/local/Pablito/results.log
【问题讨论】:
-
您正在前台调用
xterm命令。这意味着脚本将等到xterm终止——即,直到终端窗口关闭。当您关闭 xterm 窗口时会发生什么?此外,您的脚本中似乎缺少反斜杠(实际脚本中是否缺少反斜杠,或者您只是在发布时打错了字?),exit应该缩进,以便它作为代码块的一部分出现。 -
当我关闭 xterm 时它只会关闭 dowm 并关闭 GUI
-
你怎么知道我在后台调用 xterm?我先给 xterm 命令,然后它就挂断了抱歉,因为缺少反斜杠的类型
-
然后看起来脚本运行正常;它启动
xterm,并在xterm窗口关闭时终止。我猜不出为什么 GUI 会关闭;这将是您的 Java 代码中没有向我们展示的内容。 -
"你怎么知道我在后台调用 xterm?"我说你在前台调用 xterm。要在后台调用它,您需要使用
&来执行命令。我不知道你是否想这样做;程序应该在xterm窗口可见时继续运行,还是应该等待?