打开终端时启动 GNU 屏幕

打开终端时启动 GNU 屏幕

我希望每个打开的终端都会通过屏幕会话启动。其实我想要的只是通过以下步骤完成:

1. win+enter (open terminal in i3wm)
2. $ screen

我想自动做到这一点并把

[[ $TERM != "screen" ]] && screen

里面.bashrc。作为副作用,现在我看到生成了很多 bash 进程(为什么?)

alexhop+ 19307  0.0  0.0  28276  3016 pts/0    S+   11:20   0:00 screen
alexhop+ 19308  2.5  0.4  59272 33572 ?        Rs   11:20   0:00 SCREEN
alexhop+ 19309  0.2  0.0  24084  5516 pts/2    Ss+  11:20   0:00 /bin/bash
alexhop+ 19322  0.2  0.0  24084  5456 pts/3    Ss+  11:20   0:00 /bin/bash
alexhop+ 19338  0.2  0.0  24084  5316 pts/4    Ss+  11:20   0:00 /bin/bash
alexhop+ 19354  0.2  0.0  24084  5452 pts/5    Ss+  11:20   0:00 /bin/bash
alexhop+ 19370  0.2  0.0  24084  5388 pts/6    Ss+  11:20   0:00 /bin/bash
alexhop+ 19386  0.2  0.0  24084  5356 pts/7    Ss+  11:20   0:00 /bin/bash
alexhop+ 19402  0.2  0.0  24084  5452 pts/8    Ss+  11:20   0:00 /bin/bash
alexhop+ 19418  0.2  0.0  24084  5436 pts/9    Ss+  11:20   0:00 /bin/bash
alexhop+ 19434  0.2  0.0  24084  5456 pts/10   Ss+  11:20   0:00 /bin/bash
alexhop+ 19450  0.2  0.0  24084  5396 pts/11   Ss+  11:20   0:00 /bin/bash
alexhop+ 19466  0.2  0.0  24084  5388 pts/12   Ss+  11:20   0:00 /bin/bash
alexhop+ 19482  0.2  0.0  24084  5388 pts/13   Ss+  11:20   0:00 /bin/bash
alexhop+ 19498  0.2  0.0  24084  5388 pts/14   Ss+  11:20   0:00 /bin/bash
alexhop+ 19514  0.2  0.0  24084  5384 pts/15   Ss+  11:20   0:00 /bin/bash
alexhop+ 19530  0.2  0.0  24084  5512 pts/16   Ss+  11:20   0:00 /bin/bash
alexhop+ 19546  0.2  0.0  24084  5388 pts/17   Ss+  11:20   0:00 /bin/bash
alexhop+ 19562  0.0  0.0  24084  5384 pts/18   Ss+  11:20   0:00 /bin/bash
alexhop+ 19578  0.2  0.0  24084  5436 pts/19   Ss+  11:20   0:00 /bin/bash
alexhop+ 19594  0.2  0.0  24084  5388 pts/20   Ss+  11:20   0:00 /bin/bash
alexhop+ 19610  0.3  0.0  24084  5384 pts/21   Ss+  11:20   0:00 /bin/bash

任何帮助,将不胜感激。

主机系统:Ubuntu 16.04.2 LTS

答案1

这几乎肯定会发生,因为您的环境中的某些东西(.bashrc/etc/profile,等等)正在设置 TERM 变量(例如类似的东西TERM=xterm)。

这会导致[[ $TERM != "screen" ]]测试评估为 true,因此启动另一个 screen 实例。

bashscreen 然后在其内部运行 $SHELL,导致启动screenscreen启动的无限循环bash

顺便说一句,如果在启动$TERM之前没有正确设置,那么将不知道如何正确地使用它正在运行的终端。所以不设置它不是一个好的选择。screenscreen

有几种更好的方法可以检测 shell 是否正在内部运行screen。看我如何知道我是否正在 Linux“屏幕”内运行?如何判断我是否在屏幕中?从其他许多次在姐妹 Stack Exchange 网站上提出这个问题的答案。

最简单的方法可能是测试 $STY 变量是否为空。根据man screen,该变量设置为screen保存“备用套接字名称”。

换句话说,不是:

[[ $TERM != "screen" ]] && screen

尝试这个:

[ -z "$STY" ] && screen    # test if $STY is empty

或者:

[ -n "$STY" ] || screen    # test if $STY is NOT empty.

[[ .... ]]如果您愿意,也可以使用。它没有什么区别,只是你不必双引号$STY。在我看来,这是一个坏习惯,无论如何你都应该引用它,因为你的情况必须双引号变量的数量远远多于少数不需要的特殊情况。

相关内容