GNU屏幕和.bashrc

我正在尝试使用我的.bashrc启动GNU屏幕。 我快到了:

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

这是错误的! 第一个案例工作,当我打开一个terminal时, screen启动。 但是第二部分失败了。 我想打开一个普通的terminal,如果我已经有一个打开。 但是,这只是打开了无数的terminal…

你可以尝试(在其他之后):

 if [ "$HAS_STARTED_TERM"!="1"]; then HAS_STARTED_TERM=1 export HAS_STARTED_TERM exec gnome-terminal fi 

如果我没有弄错,terminal将正常打开,如果你只是删除“其他”块…或者我可能失去了一些东西。

我有办法设置的方式,我启动屏幕上的每个服务器连接到,如果它有屏幕。 当我断开并重新连接时,同一屏幕会话重新连接。 听起来不错,这是每个人都想要的。 但是,如果你有几个窗口在屏幕上打开,你怎么断开而不closures它们? 有两个选项:

  1. 如果我点击“`”,我的首选SSH客户端将断开连接。 并在我的screenrc我使用“autodetach”,但只能远程工作。
  2. 对于本地(或远程)屏幕,我有我的bashrc设置断开,如果我从屏幕上分离。 但是,在极less数情况下,您想分离并保持联系。 为此,我在.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,我相信所有的支持代码都包含在这里。 尽pipe这篇文章的长度,我已经削减了很多的脚本/configuration。