2012-07-26 137 views
0

当我执行这个脚本的终端打开并立即关闭,所以我看不到结果。从脚本打开几个xterm窗口而不关闭

没有我知道的帮助。

我使用的SunOS 5.9,这不是我的错))

#!/bin/bash 

if [ -z "$1" ]; then 
echo "enter command" 
fi 

if [ -z "$2" ]; then 
echo "enter command" 
fi 

if [ -z "$3" ]; then 
echo "enter command" 
fi 

xterm -e $1 | wait & 

xterm -e $2 | wait & 

xterm -e $3 | wait & 

回答

0

假设你想看到的命令产生什么即使失败了,替换为你的命令:

xterm -xrm '*hold: true' -e $1 & # this is to keep xterm from closing 
pid1=$! # this is to save the pid, in case you want to close it 
disown # this is to prevent the finishing shell from closing the xterm 

或者,如果xterm不支持-xrm选项:

CMD="$1" xterm -e $SHELL -c '$SHELL -c "$CMD"; read' 

这两个shell将保护命令中的语法错误,即使在这种情况下也能保持xterm打开。

+0

不幸没有帮助..... 但我会记住它的未来 – 2012-07-26 12:48:24

+0

你的xterm可能是一个奇怪的东西,它不支持'-xrm'。您可以查看暂停运行命令的shell。我会在另一台机器上更新回答 – fork0 2012-07-26 14:50:29

+0

! – 2012-07-27 13:49:18

1

-hold选件于1999年被添加到XFree86 xterm(patch 116)。但是,Sun继续提供xterm的“openwin”二进制文件,直到2011年的Solaris 11(请参阅xterm常见问题解答Why can't I use the pageup/pagedown keys?)。在那之前,Sun在免费软件CDROM上提供了现代xterm。

提供“保持”功能的通常建议是在所需命令之后包含“读取”命令。这假定要执行的命令在shell中运行。如果您想运行vi,则建议的修复程序不起作用,因为可能涉及到替代屏幕。此外,它依靠$SHELL设置(并且对某些设置不起作用,例如tcsh - 但对bash有效)。

这是一种改进的脚本,解决了这些问题:

#!/bin/bash 
export SHELL=/bin/bash 
while [ $# != 0 ] 
do 
    CMD="$1" \ 
    xterm -xrm '*titeInhibit:true' -e $SHELL -c '$SHELL -c "$CMD"; read' 
    shift 1 
done 

xterm所有版本支持-xrm开关(谈到自由与XT的X工具包库)。

明确的titeInhibit资源解决了运行全屏应用程序(如vi)时遇到的问题。在Solaris 11中为xterm提供的终端描述对于全屏应用使用替代屏幕。这在xterm FAQ Why doesn't the screen clear when running vi?中讨论。如果没有资源设置,如果将脚本运行到vi几个文件,屏幕将在退出vi并等待用户按输入关闭窗口后被清除。在其他系统中,这种行为不是默认的,xterm或ncurses源已经被修补以反映包装者的偏好。同样,Solaris 9的terminfo源代码已被修补。尽管如此,未能处理xterm的常用行为将是一个问题。

例如,即使使用Solaris 9,许多用户依赖ncurses来提供可行的彩色终端描述。 Solaris(如xterm FAQ What $TERM should I use?中所述)提供了xtermc,但其功能键与实际的xterm完全不同,因此它是一个糟糕的选择。Sun的免费软件光盘的terminfo(来自ncurses)没有修补;使用该终端数据库的人员通过备用屏幕获得了预期的行为。