当您完成命令屏幕后,如何禁用输出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
显然,每次更新包时都必须重新运行脚本。