0

当我执行这个脚本时,终端正在打开并立即关闭,所以我看不到结果。

我所知道的没有任何帮助。

我使用的是 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 & 
4

2 回答 2

1

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

提供“保持”功能的通常建议涉及在所需命令之后的“读取”命令。假设要执行的命令在 shell 中运行。如果要运行vi,建议的修复不起作用,因为可能涉及备用屏幕。此外,它依赖于$SHELLset (并且不适用于某些,例如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 中有讨论为什么运行 vi 时屏幕不清晰?. 如果没有资源设置,如果一个脚本运行到vi多个文件,退出后屏幕会被清除vi,同时等待用户按下Enter关闭窗口。在此行为不是默认行为的其他系统上,已修补 xterm- 或 ncurses-sources 以反映打包者的偏好。同样,Solaris 9 的 terminfo 源代码也已修补。尽管如此,无法处理常用的行为xterm将是一个问题。

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

于 2015-04-01T23:07:54.363 回答
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 打开。

于 2012-07-26T12:09:09.780 回答