2010-08-12 51 views
13

只有噹噹前終端 窗口由GNU屏幕管理時,我纔有一個命令我想在.bashrc執行。我該怎麼做呢?有沒有一個環境變量?我曾經有如何判斷當前終端會話是否在GNU屏幕中?

 
if [ -n "$WINDOW" ]; then 
    command 
fi 

但是,從我可以告訴,$WINDOW可能會或可能不會在所有屏幕 管理會話定義。

+0

可能重複[如何判斷我是否在屏幕上?](http://stackoverflow.com/questions/5392618/how-can-i-tell-whether-im-in-a屏幕) – LopSae 2014-02-14 01:45:02

回答

17

檢查環境變量$ STY一些啓發(包含屏幕信息)或$ TERM是'屏幕'(可能不太可靠)。

+0

我一直在使用到目前爲止使用$ TERM的貨物崇拜腳本。感謝你!只是爲了讓它變得更糟,腳本運行的一些框具有如此舊的bash版本,以致條件限制(例如,沒有部分匹配) – Jan 2013-05-11 18:08:47

4

檢查$TERM,它在屏幕上會被設置爲 'screen'。(但不能保證100%)

UPDATE

或者,您也可以使用,在屏幕上,$TERMCAP包含的事實屏幕串:

[[ $TERMCAP =~ screen ]] && echo "in screen" 

也不能100%保證

UPDATE2

如果兩種方法都無效,你可以找到在screen manual

+0

屏幕似乎從啓動終端會話繼承$ TERM值。所以在我的情況下,它是xterm-256color,它取決於環境。我想要的是可以在所有環境下工作的通用解決方案。 – OTZ 2010-08-12 21:49:25

+0

@otz我很害怕這樣:)更新了另一種可能性 – mykhal 2010-08-12 21:58:24

+0

$ TERMCAP方法適用於更多的情況,但錯過了在同一屏幕窗口下SSH連接到其他主機的情況,在這種情況下$ TERMCAP不會包含「屏幕」子。因此,適用性與$ WINDOW完全相同,因爲一旦你ssh到其他主機,它的價值也會丟失。但是所有事情都一樣,$ WINDOW謂詞的運行速度更快。 – OTZ 2010-08-12 22:07:10

1

檢查變量$ TERM

+0

它可能會或可能不會工作,這取決於環境。 – OTZ 2010-08-12 21:51:21

2

我想建議一個總是可見的替代解決方案,並且不需要檢查就知道你在screen會話中。

只需添加/編輯文件~/.screenrc$HOME文件夾並添加caption命令:

caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m} %Y-%m-%d %0c" 

,你會得到在最底部一行始終可見和有色。

Screen session on host (system load: 1.50 1.40 1.30)  2017-04-23 14:06 

請注意:

當你在裏面屏幕上host1和打開另一個SSH會話host2上開屏有其中也有.screenrc你會得到兩條線在底部從下向上堆疊(如包裝)。

這在這種情況下非常有用!

Screen session on host2 (system load: 0.01 0.03 0.05) 2017-04-23 14:14 Screen session on host1 (system load: 0.00 0.00 0.00) 2017-04-23 14:14


附加信息:

https://www.gnu.org/software/screen/manual/html_node/Caption.html

Command: caption always|splitonly [string]

https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html#String-Escapes


我發現這個打here上SO。

相關問題