Ubuntu

打開終端時啟動 GNU 螢幕

  • February 20, 2018

我希望每個打開的終端都將通過螢幕會話啟動。其實我想要的只是通過以下步驟完成:

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

這幾乎肯定會發生,因為您的環境中的某些東西(.bashrc,/etc/profile等)正在設置 TERM 變數(例如,類似的東西TERM=xterm)。

這會導致[[ $TERM != "screen" ]]測試評估為真,因此啟動另一個螢幕實例。

bashscreen 然後在自身內部執行你的 $SHELL ,導致開始screenscreen開始的無限循環bash

順便說一句,如果在開始$TERM之前沒有正確設置,screen那麼screen將不知道如何正確使用它正在執行的終端。所以不設置它不是一個好的選擇。

有幾種更好的方法可以檢測外殼是否在內部執行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。IMO 這是一個不好的習慣,無論如何你都應該引用它,因為你必須雙引號你的變數的情況大大超過了你不需要的少數特殊情況。

引用自:https://unix.stackexchange.com/questions/425330