Ubuntu
打開終端時啟動 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
這幾乎肯定會發生,因為您的環境中的某些東西(
.bashrc
,/etc/profile
等)正在設置 TERM 變數(例如,類似的東西TERM=xterm
)。這會導致
[[ $TERM != "screen" ]]
測試評估為真,因此啟動另一個螢幕實例。
bash
screen 然後在自身內部執行你的 $SHELL ,導致開始screen
和screen
開始的無限循環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 這是一個不好的習慣,無論如何你都應該引用它,因為你必須雙引號你的變數的情況大大超過了你不需要的少數特殊情況。