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

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

“屏幕”指的是如何重新连接到断开的 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,则没有编号。

相关内容