“屏幕”指的是如何重新连接到断开的 ssh 会话。那是一个很好的设施。
但有一个问题我很想知道。我怎么知道我是否在“屏幕”内运行?区别在于:
- 如果是,我知道我可以安全地关闭当前终端窗口,例如关闭 PuTTY 窗口,而不会丢失我的 shell(Bash 等)会话。
- 如果没有,我知道我必须在关闭终端窗口之前处理所有未完成的工作。
更好的是,我希望这个状态显示在 PS1 提示中,以便我可以随时自动看到它。
答案1
(摘自“我如何知道我是否在屏幕中?“在 StackOverflow 上,由用户撰写乔霍。PS:您不能在 StackExchange 网站上对重复的内容进行投票。)
检查$STY
。如果它为空,则表示您处于“真实”终端上。如果它包含任何内容,则表示您当前所处屏幕的名称。
如果您不在屏幕上:
eric@dev ~ $ echo $STY
eric@dev ~ $
如果您在屏幕上:
eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71
如果你使用 tmux 而不是 screen,也请检查$TMUX
。要将其添加到你的提示中,请将以下内容添加到你的~/.bashrc
:
if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi
答案2
查找$STY
提供screen
用于与自身通信的详细信息;$WINDOW
然后将是当前screen
窗口编号。
答案3
我通常使用的简单检查就是点击Ctrl- a:
如果光标跳转到行首, 我是不在里面屏幕会话。
如果什么都没发生, 我知道我在里面screen 会话,我刚刚使用了 screen 控制键。然后我点击a(跳到行首)、w(显示当前 screen 窗口)或执行其他“无害”的 screen 命令以返回命令提示符。
(当然,这仅当您当前正在执行 bash 或其他一些“跳转到行首”或在按下 Ctrl-a 时执行同等无害操作的软件时才有效。)
答案4
我将其保存在我的.bashrc
:
PS1='[\u@\h \W'
if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
PS1="$PS1]$"
它并非万无一失,但每当我创建新屏幕时,它都会将窗口编号放入提示中。如果我没有运行screen
,则没有编号。