从脚本打开几个xterm窗口而不关闭

时间:2012-07-26 11:44:43

标签: bash 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 & 

2 个答案:

答案 0 :(得分:1)

-hold选项在1999年添加到XFree86 xterm(patch 116)。但是,Sun继续提供xterm的“openwin”二进制文件,直到2011年的Solaris 11(参见xterm FAQ 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 Toolkit库免费提供)。

显式titeInhibit资源解决了运行全屏应用程序(例如vi)的问题。 Solaris 11中为 xterm 提供的终端描述使用备用屏幕进行全屏应用程序。这在xterm FAQ Why doesn't the screen clear when running vi? 中讨论。如果没有资源设置,如果将脚本运行到vi多个文件,退出vi后屏幕将被清除,同时等待用户按 Enter 关闭窗口。在此行为不是默认行为的其他系统上,已修补xterm-或ncurses-sources以反映packager的首选项。同样,Solaris 9的terminfo源已经过修补。尽管如此,未能处理xterm的常用行为将是一个问题。

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

答案 1 :(得分: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打开。