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

Jim*_*hen 60 linux gnu-screen

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

但是有一个问题我很想知道。我怎么知道我是否在“屏幕”内运行?区别在于:

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

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

Wes*_*ley 88

(从StackOverflow上的我如何判断我是否在屏幕上? ”中窃取,由用户jho撰写。PS 您不能在 StackExchange 站点上为重复项投票。)

检查$STY。如果它为空,则您在“真实”终端上。如果它包含任何内容,则是您所在屏幕的名称。

如果您不在屏幕中:

eric@dev ~ $ echo $STY
eric@dev ~ $ 
Run Code Online (Sandbox Code Playgroud)

如果您在屏幕中:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71
Run Code Online (Sandbox Code Playgroud)

如果您使用 tmux 而不是 screen,还要检查$TMUX. 要将其添加到您的提示中,请将以下内容添加到您的~/.bashrc

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi
Run Code Online (Sandbox Code Playgroud)

  • 如果你通过 `sudo` 运行某些东西,它默认不会继承环境变量,包括 `$STY`。但是 [`$TERM`](https://serverfault.com/a/377224/18861) _is_ 通常会传播到 sudo 环境,所以也许可以检查一下 `$STY` _或_ `$TERM=="screen"` (2认同)

gee*_*aur 14

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


Hei*_*nzi 13

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

  • 如果光标跳到行首,则我不在屏幕会话中。

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

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

  • 当然,这仅在您的屏幕控制键保留为默认的 Ctrl-a 时才有效。 (3认同)

wom*_*ble 7

好吧,大多数时候(没有人试图搞砸事情)您TERM将被设置为screen(或至少在screen某处提及)。

解决问题的简单方法是到处运行 screen 。没有它就不要离开家,我说。


小智 7

我把这个放在我的.bashrc

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"
Run Code Online (Sandbox Code Playgroud)

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