我怎么知道我正在运行一个Linux的“屏幕”或不?

“屏幕”是指如何重新连接到断开连接的SSH会话中提到的程序。 这是一个很好的设施。

但是我真的很想知道一个问题。 我怎么知道我是否在“屏幕”内运行? 区别在于:

  • 如果是的话,我知道我可以安全地closures当前的terminal窗口,例如closuresPuTTY窗口,而不会丢失我的shell(Bash等)会话。
  • 如果否,我知道在closuresterminal窗口之前我必须处理任何待处理的作品。

更好的是,我希望在PS1提示符下显示这个状态,以便我可以随时自动看到它。

    (从“ 我怎样才能知道我是否在屏幕上? ”在StackOverflow上被窃取 ,并由用户jho。PS进行撰写您不能在StackExchange站点投票重复。)

    检查$STY 。 如果它是空的,你是在一个“真正的”terminal。 如果它包含任何内容,则是您所在的屏幕的名称。

    如果你不在屏幕上:

     eric@dev ~ $ echo $STY eric@dev ~ $ 

    如果你在屏幕上:

     eric@dev ~ $ echo $STY 2026.pts-0.ip-10-0-1-71 

    如果您使用tmux而不是屏幕,请检查$TMUX 。 要将这个添加到你的提示中,把下面的内容添加到你的~/.bashrc

     if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi 

    寻找$STY ,它提供了screen用来与自己沟通的细节; $WINDOW将会是当前的screen窗口号。

    我通常使用的简单检查就是按Ctrla

    • 如果光标跳转到行首 ,我不在屏幕会话中。

    • 如果什么也没有发生 ,我知道我在一个屏幕会话内,而我刚刚使用了屏幕控制键。 然后,我打了一个 (跳到行首), w (显示当前的屏幕窗口)或执行一些其他“无害的”屏幕命令返回到命令提示符。

    (当然,这只有在你正在执行bash或其他一些软件的时候才会起作用,这些软件会跳到“起始行”,或者在按下Ctrl-a时做一些等同的无害操作)。

    那么, 大部分时间(如果没有人试图把事情搞砸)你的TERM将被设置为screen (或者至less在某处提到screen )。

    解决问题的简单方法就是到处运行屏幕。 不要离开家,我说。

    我把它保存在我的.bashrc

      PS1='[\u@\h \W' if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi PS1="$PS1]$" 

    这不是万无一失的,但每当我创build一个新的屏幕,它将提示窗口号码。 如果我没有运行screen ,没有号码。

    我有一个更酷的方式。

    将以下内容添加到你的〜/ .screenrc文件中,你会在底部看到一个状态行(以倒排文字显示date,时间和系统负载。

      hardstatus alwayslastline hardstatus string '%Y-%m-%d %c | %l' 

    在屏幕会话中使用ctrl-a:source ~/.screenrc

    我得感谢Linux Journal的Kyle Rankin。 在http://www.linuxjournal.com/article/10950上看到他精彩的文章。 他提到的手册页部分可以在http://www.gnu.org/software/screen/manual/screen.html#String-Escapesfind。

    您也可以从$$递增进程树,以查看是否find屏幕实例。 确切的链将可能取决于你的设置 – 在我的OS X框中,屏幕内的zsh login为其父, SCREEN作为其祖父母, screen作为其祖父母。

    你可以使用这个。 它短而甜蜜。

     function trim() { echo "${1// /}" } VAR=" xxx " echo $VAR TRIMMED_VAR=$(trim "$VAR") echo $TRIMMED_VAR