“屏幕”是指如何重新连接到断开的ssh会话中提到的程序。这是一个很好的设施。

但是我真的想知道一个问题。我如何知道我是否正在“屏幕”中运行?区别是:


如果是的话,我知道我可以安全地关闭当前的终端窗口,例如,关闭PuTTY窗口,而不会丢失我的shell(Bash等)会话。如果不是,我知道我必须在关闭终端窗口之前处理所有待处理的工作。自动计时。

评论

如果使用tmux而不是屏幕,则默认情况下会显示一个小状态栏。它们的基本用法几乎相同。

将您的图腾放在桌上,然后旋转。如果它继续旋转,就可以了。否则您在屏幕上:]

您也可以在屏幕和tmux中使用byobu。可以将其设置为在登录时自动加载,然后按F6键断开连接并注销。

如何检查我是否在屏幕会话中的可能重复项?

#1 楼

(在StackOverflow上的“如何辨别我是否在屏幕上?”一文中被用户jho所创作。PS您不能在StackExchange站点之间为重复项投票。) 。如果为空,则您位于“真实”终端上。如果其中包含任何内容,则为您所在屏幕的名称。

如果您不在屏幕中:

eric@dev ~ $ echo $STY
eric@dev ~ $ 


如果在屏幕中:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71


如果使用tmux代替屏幕,请同时检查$STY。要将其添加到提示中,请将以下内容添加到您的$TMUX中:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi


评论


如果通过sudo运行某些内容,则默认情况下不会继承环境变量,包括$ STY。但是$ TERM通常会传播到sudo环境,因此请检查$ STY或$ TERM ==“ screen”

–rcoup
17年8月15日在7:19

#2 楼

寻找$STY,其中提供了screen用于与其自身通信的详细信息;然后$WINDOW将是当前的screen窗口号。

#3 楼

我通常使用的简单检查是按Ctrl-a键:如果没有任何反应,我知道我在一个屏幕会话中,并且我刚刚使用了屏幕控制键。然后,我按下a(跳到该行的开头),w(显示当前屏幕窗口)或执行其他一些“无害”屏幕命令以返回到命令提示符。

(当然,仅当您当前正在执行bash或“跳至行首”的其他软件或在按Ctrl-a时执行等效的无害操作时,此方法才有效。)

评论


当然,这仅在屏幕控制键保留为默认Ctrl-a时有效。

–ShreevatsaR
2012年4月6日12:53

按下控制键+ DD将分离并终止ssh。您可以按此组合以获得更多便利

–akostadinov
2012年4月6日下午14:14

尽管对于实际问题的答案是正确的,但此方法不可编写脚本。

– Nikodemus RIP
2014年12月2日上午11:08

#4 楼

好吧,大多数时候(如果没有人用螺丝钉扎住东西),您的TERM将被设置为screen(或至少在某处提到screen)。 。我说不要离开家。

评论


$ TERM通常还会通过sudo传播,这是一个加号!

–rcoup
17年8月15日在7:19

#5 楼

我将其保存在我的.bashrc中:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"


这不是万无一失的,但是每当我创建一个新屏幕时,它都会在提示中放入窗口号。
如果我没有运行screen,没有号码。

#6 楼

我有一个更酷的方法。

将以下内容添加到您的〜/ .screenrc中,您将在底部看到状态行(以反向文本显示日期,时间和系统负载。在下面的手册页链接中找到的代码。

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'


在与ctrl-a:source ~/.screenrc进行屏幕对话时获取此代码。为此,请参见Linux Journal。请参阅他的精彩文章,网址为http://www.linuxjournal.com/article/10950。 /screen.html#String-Escapes。

#7 楼

您还可以从$$递归过程树,以查看是否找到了屏幕实例。确切的链条可能取决于您的设置-在我的OS X盒子上,内部屏幕上的zsh是其父级,login是其祖父母,SCREEN是其曾祖父母。