当我执行这个脚本时,终端正在打开并立即关闭,所以我看不到结果。
我所知道的一切都没有帮助。
我正在使用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 :(得分: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打开。