AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1580
In Process
devin
devin
Asked: 2009-05-01 12:13:43 +0800 CST2009-05-01 12:13:43 +0800 CST 2009-05-01 12:13:43 +0800 CST

GNU 屏幕和 .bashrc

  • 772

我正在尝试使用我的.bashrc. 我快到了:

if [ -z "$STY" ]; then
   exec screen -dR
else
   exec gnome-terminal
fi

虽然这是错误的!第一种情况有效,screen当我打开终端时启动。但第二部分失败了。如果我已经打开了一个常规终端,我想打开一个。但这只会打开无限数量的终端......

bash gnu-screen bashrc
  • 4 4 个回答
  • 3125 Views

4 个回答

  • Voted
  1. Lucas Jones
    2009-05-01T12:17:46+08:002009-05-01T12:17:46+08:00

    您可以尝试(在 else 之后):

    if [ "$HAS_STARTED_TERM"!="1"]; then
        HAS_STARTED_TERM=1
        export HAS_STARTED_TERM
        exec gnome-terminal
    fi
    
    • 2
  2. Ivan
    2009-05-01T12:19:37+08:002009-05-01T12:19:37+08:00

    如果我没记错的话,如果你只是删除“else”块,终端就会正常打开......或者我可能遗漏了一些东西。

    • 1
  3. Bruno Bronosky
    2009-06-11T22:22:34+08:002009-06-11T22:22:34+08:00

    我设置东西的方式是在我连接的每台服务器上启动屏幕(如果它有屏幕)。当我断开连接并重新连接时,会重新连接相同的屏幕会话。到目前为止听起来不错,这是每个人都想要的。但是,如果您在屏幕上打开了多个窗口,如何在不关闭它们的情况下断开连接?有2个选项:

    1. 如果我点击“`”,我首选的 ssh 客户端将断开连接。在我的screenrc中我使用“自动分离”,但这只能远程工作。
    2. 对于本地(或远程)屏幕,如果我从屏幕分离,我的 bashrc 设置为断开连接。但是,在极少数情况下,您希望分离并保持连接。为此,我的 .bash_logout 中有一些魔法来补充我的 .bashrc 魔法。

    .screenrc

    hardstatus alwayslastline
    hardstatus string '%{= kG} %{G}%H %{g}[%= %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}] %{W}%c %{g}'
    #dynamic title
    shelltitle '# |sh'
    
    #When your ssh connection dies, screen is autodetached
    autodetach on 
    
    #terminfo and termcap for nice 256 color terminal
    # allow bold colors - necessary for some reason
    attrcolor b ".I"
    # tell screen how to set colors. AB = background, AF=foreground
    termcapinfo xterm "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
    termcapinfo xterm-color "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
    # erase background with current bg color
    defbce "on"
    

    .bashrc

    # set a fancy prompt (non-color, unless we know we "want" color)
    if [[ $TERM =~ xterm-.*color || $TERM =~ screen.* ]]; then
       PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]# '
       #if [[ $TERM =~ screen.* ]]; then
       export SCREEN_CMD=$(which screen 2>/dev/null)
       if [[ ( $TERM =~ screen.* ) || ${SCREEN_CMD-X} != X && ${SCREEN_CMD-X} != "" ]]; then
          # This is the escape sequence ESC k \w ESC \
          #Use path as title
          #SCREENTITLE='\[\ek\w\e\\\]'
          #Use program name as title
          SCREENTITLE='\[\ek\e\\\]'
       else
          #Soliton@freenode#screen suggested screen -xRRS primary
          echo ^[k$(hostname|sed "s/\..*//")^[\\
          export SCREEN_CMD=$(which screen 2>/dev/null)
          if [[ ${SCREEN_CMD-X} != X && ${SCREEN_CMD-X} != "" ]]; then
             screen -xRRS primary && unset SCREEN_CMD && [[ $(stat -c %Y .screen_do_not_disconnect 2>/dev/null || stat -f %m .screen_do_not_disconnect 2>/dev/null) -gt 0 ]] || exit
          fi
       fi
    else
       PS1='\u@\h:\w# '
       SCREENTITLE=''
       #Soliton@freenode#screen suggested screen -xRRS primary
       echo ^[k$(hostname|sed "s/\..*//")^[\\
       export SCREEN_CMD=$(which screen 2>/dev/null)
       if [[ ${SCREEN_CMD-X} != X ]]; then
          screen -xRRS primary && unset SCREEN_CMD && [[ $(stat -c %Y .screen_do_not_disconnect 2>/dev/null || stat -f %m .screen_do_not_disconnect 2>/dev/null) -gt 0 ]] || exit
       fi
    fi
    PS1="${SCREENTITLE}${PS1}"
    

    .bash_logout

    # ~/.bash_logout
    
    time="$(TZ=UTC date -d @0 2>/dev/null||date -r 0 +%Y%m%d%H%M)"
    touch -d "$time" ~/.screen_do_not_disconnect 2>/dev/null || touch -t "$time" ~/.screen_do_not_disconnect
    

    上面的脚本可以在 Linux 和 Mac OS X 上运行(这就是你在 stat、touch 和 date 命令中看到“2>/dev/null ||”的原因)。我也使用 256 色 xterm,我相信所有支持代码都包含在此处。尽管这篇文章很长,但我已经从脚本/配置中删除了很多内容。

    • 1
  4. Ioannis Kourouklides
    2020-09-20T06:23:26+08:002020-09-20T06:23:26+08:00

    只需输入:

    if [ -z "$STY" ]; then
       screen -ARR
    fi
    

    请注意,没有exec,else也不需要。然后,您只需键入exit即可返回常规终端。

    使用-ARR的另一个好处是它总是会恢复第一个适当的分离屏幕会话,如果有的话。否则,它将创建一个新的,这就是您要实现的目标。

    来源:屏幕手册页

    • 0

相关问题

  • 在 .bashrc 中设置环境变量的最佳方法是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve