怎么知道我是否在屏幕上?

use*_*125 70 linux shell gnu-screen

在linux中使用屏幕时,如何判断我是否在屏幕上?我可以这样做exit,如果我在一个屏幕上,我将退出屏幕,但如果我不在,那么我最终会关闭我的终端.

在做的时候screen -r,我可以看到我是否连接了其他屏幕,但是如何知道我当前的终端是否是其中一个连接的屏幕?

jho*_*jho 115

检查$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)

  • @StevenYou可能代表"Screen TYpewriter"或"Socket TYpewriter".[TTY](https://en.wikipedia.org/wiki/Teleprinter)代表"TeleTYpewriter",[PTY](http://man7.org/linux/man-pages/man7/pty.7.html)代表"Pseudoterminal TYpewriter".他们可能认为很明显他们不需要明确提及他们的推理.正如这次对话证明的那样,他们错了. (7认同)
  • STY代表什么? (3认同)
  • 对于它的价值,这似乎不适用于osx上的tmux而基于"$ TERM"的检查. (3认同)
  • @StevenYou我发现的所有内容都是["备用套接字名称"](http://sunsite.ualberta.ca/Documentation/Gnu/screen-3.9.4/html_chapter/screen_22.html).这并没有真正解释变量名的选择. (2认同)

JJC*_*JJC 15

我做的另一种方法是回应$ TERM.由于我最终做了很多,我在.bashrc文件中添加了一个别名:

 $ echo $TERM
 screen
Run Code Online (Sandbox Code Playgroud)

这样,无论是否在屏幕上,如果我只是执行'trm',它会告诉我我是在SCREEN还是其他地方(通常是XTERM).

  • 实际上,Parthian,至少在所有最近的 OS-X/macOS、所有最近的 CentOS 和 Ubuntu(至少 14.04)中,$TERM 确实只返回“屏幕”。不确定您在哪个版本的操作系统/内核/shell 下看到“screen.linux”。 (2认同)

por*_*ors 11

检查您是否在屏幕中的替代方法.

类型:

Ctrl-a ?
Run Code Online (Sandbox Code Playgroud)

如果你看到屏幕帮助你在屏幕上.

否则你会得到一个问号'?' 在提示上.

  • 当然,这假设 `Ctrl` + `a` 是 screen 的命令字符。虽然这对大多数人来说都是正确的,但值得指出的是,命令字符可以被 `-e` 标志覆盖,所以这并不总是有效。 (2认同)