2016-09-08 168 views
0

现在我知道标题并没有真正解释我想要做什么,因为我发现了类似的问题,但他们都没有真正涵盖我想要做的事情。这可能是我想要做的一个名字,但现在它逃避了我。如何在关闭脚本后在终端中隐藏bash脚本输出?

因此,我可以找到解释我试图实现的easies方式是用示例。现在我有一个交互式bash脚本,它的工作方式和预期的一样,但是它让我感到困扰,关闭它后,它停留在我的终端上。 认为“顶部”vs“htop”,在关闭顶部之后,您会看到新的提示行,但您仍然会在终端上看到顶部输出。您甚至可以在打开顶部之后向上滚动终端。 有了htop,你不能在终端上真的向上或向下滚动,当你关闭htop时,你只会看到最后一条提示行htop。

所以我试图让我的脚本运行“包含”,就像htop或vi一样,所以我不必在关闭它后看到脚本输出。无论如何用bash做到这一点?

+1

这是全屏应用程序使用的初始化/取消初始化序列的副作用,该应用程序切换到备用屏幕缓冲区。 – Barmar

+0

@rednep给出的解决方案在我看来最优雅。更简单但更残酷的方法是在脚本末尾调用“清除”。但是,这也会消除在您的交互式工具执行之前屏幕上的输出**。 – user1934428

回答

0

创建以下脚本:

#!/bin/bash 
tput smcup 
"[email protected]" 
tput rmcup 

调用此alt-screen.sh。随着该脚本的帮助下,你可以在所谓的备用屏幕上运行其它任何程序(这是htopvi运行)如下:

./alt-screen.sh foo --option=value arg1 arg2 

对于一个具体的例子,试试这个:

./alt-screen.sh bash -c 'date; sleep 3' 

这是如何工作的?这很简单;它使用tput切换到备用屏幕,然后执行该程序,然后切换回原始屏幕。

注意:上面的脚本是相当简单的。你可能想要以各种方式改进它。例如,以下版本的Works如上所述并且还保留了节目的状态代码:

#!/bin/bash 
tput smcup 
"[email protected]" 
status=$? 
tput rmcup 
exit $status 

注2:我没有测试过这种广泛的,它几乎肯定会具有不良副作用,但在许多情况下它可能工作得很好。