我怎么知道我是否在Linux“屏幕”中运行?


60

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

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

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

更好的是,我希望此状态显示在PS1提示符下,以便我可以随时自动看到它。


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

9
将图腾放在桌上,然后旋转。如果它继续旋转,那就没问题。否则,您正在浏览屏幕:]
Konerak

您还可以将byobu与screen和tmux一起使用。可以将其设置为在登录时自动加载,然后按F6键断开连接并注销。
mp3foley 2012年

Answers:


88

(在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

2
如果您sudo默认通过它运行某些内容,则不会继承环境变量,包括$STY。但通常传播到sudo的环境,所以也许检查要么$TERM $STY $TERM=="screen"
rcoup

14

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


13

我通常使用的简单检查就是点击Ctrl- a

  • 如果光标跳到该行的开头,那么不在屏幕会话中。

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

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


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

1
按下控制键+ DD将分离并终止ssh。您可以
按此

虽然对于实际问题的答案是正确的,但是此方法不可编写脚本。
Nikodemus RIP 2014年

7

好吧,在大多数情况下(如果没有人试图弄乱事情的话),您的习惯TERM就会被设置为screen(或者至少在screen某处提到)。

解决该问题的简单方法是在任何地方都运行屏幕。我说不要没有它就离开家。


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

7

我把这个放在我的.bashrc

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

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


3

我有一个更酷的方法。

将以下内容添加到〜/ .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中找到。


2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.