禁用屏幕输出“[屏幕正在终止]”

禁用屏幕输出“[屏幕正在终止]”

当您完成命令屏幕后,如何禁用输出screen

例子:

function foo()
{
    echo "Testing..."
    sleep 2
    echo "Done!"
}
export -f foo
screen -q bash -c "foo" &> /dev/null

一切都按预期工作,但是我无法找到如何禁用“[屏幕正在终止]”。

答案1

我能想到的解决方案只有两种。首先是修改屏幕代码本身并重新编译。第二个是expect在程序周围有一个类似包装器的东西(未经测试):

#!/usr/bin/expect -f
spawn screen -q bash -c foo
interact {
    "\[screen is terminating]" exit
}

答案2

屏幕正在使用您的 tty 来写入该文本,因此您无法通过仅将 stdout 或 stderr 重定向到/dev/null.

我有最简单的方法从输出中删除该行。

在这种方法中,您需要向上移动光标并清除该行。转义字符可以帮助您,例如,要使用命令执行screen命令cat,您需要执行如下命令:

screen cat;echo -en '\e[A\e[K'

这将删除该行[screen is terminating]

答案3

简单:D

唯一的方法是修改“screen”可执行文件。最好的(便携式)方法是这样的:

offset=$(tr -c '[[:print:]]' '\n' <`which screen`|grep -b "screen is terminating" | cut -d ":" -f 1)
printf "\x00" | dd of=`which screen` obs=1 seek=$offset conv=notrunc

显然,每次更新包时都必须重新运行脚本。

相关内容