但是我真的想知道一个问题。我如何知道我是否正在“屏幕”中运行?区别是:
如果是的话,我知道我可以安全地关闭当前的终端窗口,例如,关闭PuTTY窗口,而不会丢失我的shell(Bash等)会话。如果不是,我知道我必须在关闭终端窗口之前处理所有待处理的工作。自动计时。
#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
是其曾祖父母。
评论
如果使用tmux而不是屏幕,则默认情况下会显示一个小状态栏。它们的基本用法几乎相同。将您的图腾放在桌上,然后旋转。如果它继续旋转,就可以了。否则您在屏幕上:]
您也可以在屏幕和tmux中使用byobu。可以将其设置为在登录时自动加载,然后按F6键断开连接并注销。
如何检查我是否在屏幕会话中的可能重复项?