“屏幕”是指如何重新连接到断开的ssh会话中提到的程序。那是一个很好的设施。
但是我真的很想知道一个问题。我如何知道我是否正在“屏幕”中运行?区别在于:
- 如果是,我知道我可以安全地关闭当前的终端窗口,例如,关闭PuTTY窗口,而不会丢失我的shell(Bash等)会话。
- 如果没有,我知道在关闭终端窗口之前,我必须处理所有待处理的工作。
更好的是,我希望此状态显示在PS1提示符下,以便我可以随时自动看到它。
“屏幕”是指如何重新连接到断开的ssh会话中提到的程序。那是一个很好的设施。
但是我真的很想知道一个问题。我如何知道我是否正在“屏幕”中运行?区别在于:
更好的是,我希望此状态显示在PS1提示符下,以便我可以随时自动看到它。
Answers:
(在StackOverflow 上的 “ 如何分辨我是否在屏幕上? ” 一词中删除,由用户jho创作。PS您无法在StackExchange网站上为重复项投票。)
检查$STY
。如果为空,则您位于“真实”终端上。如果包含任何内容,则为您所在屏幕的名称。
如果您不在屏幕上:
eric@dev ~ $ echo $STY
eric@dev ~ $
如果您在屏幕上:
eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71
如果您使用tmux而不是屏幕,请同时检查$TMUX
。要将其添加到提示中,请将以下内容添加到您的~/.bashrc
:
if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi
我通常使用的简单检查就是点击Ctrl- a:
如果光标跳到该行的开头,那么我不在屏幕会话中。
如果没有任何反应,我知道我在一个屏幕会话中,并且我刚刚使用了屏幕控制键。然后,我单击a(跳至该行的开头),w(显示当前屏幕窗口)或执行其他“无害”屏幕命令以返回到命令提示符。
(当然,仅当您当前正在执行bash或“跳至行首”的其他软件或在按Ctrl-a时执行等效的无害操作时,此方法才有效。)
我有一个更酷的方法。
将以下内容添加到〜/ .screenrc中,您将在底部看到一条状态行(以反向文本显示日期,时间和系统负载。更多的转义码可在下面的手册页链接中找到。
hardstatus alwayslastline
hardstatus string '%Y-%m-%d %c | %l'
与进行屏幕对话时,请提供此资源ctrl-a:source ~/.screenrc
。
我必须感谢Linux Journal的Kyle Rankin。在http://www.linuxjournal.com/article/10950上查看他的精彩文章。他所指的手册页部分可在http://www.gnu.org/software/screen/manual/screen.html#String-Escapes中找到。
您还可以从中递归过程树,$$
以查看是否找到了屏幕实例。确切的链条可能取决于您的设置-在我的OS X盒子上,一个zsh
内部屏幕login
的父级,SCREEN
祖父母级和曾screen
祖父母级。