Você pode tentar (depois do outro):
if [ "$HAS_STARTED_TERM"!="1"]; then
HAS_STARTED_TERM=1
export HAS_STARTED_TERM
exec gnome-terminal
fi
Estou tentando iniciar o GNU Screen usando meu .bashrc
. Estou quase lá:
if [ -z "$STY" ]; then
exec screen -dR
else
exec gnome-terminal
fi
Isso está errado! O primeiro caso funciona, screen
é lançado quando eu abro um terminal. Mas a segunda parte falha. Eu quero abrir um terminal regular se eu já tiver um aberto. Mas isso só abre um número infinito de terminais ...
Você pode tentar (depois do outro):
if [ "$HAS_STARTED_TERM"!="1"]; then
HAS_STARTED_TERM=1
export HAS_STARTED_TERM
exec gnome-terminal
fi
Se não me engano, o terminal abriria normalmente se você remover o bloco "else" ... Ou talvez eu esteja perdendo alguma coisa.
A maneira que eu tenho as coisas configuradas eu lanço a tela em todos os servidores que eu me conecto se tiver tela. Quando eu desconectar e reconectar, a mesma sessão de tela é reconectada. Soa bem até agora, é o que todo mundo quer. Mas, se você tem várias janelas abertas na tela, como você se desconecta sem fechá-las? Existem 2 opções:
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"
# set a fancy prompt (non-color, unless we know we "want" color)
if [[ $TERM =~ xterm-.*color || $TERM =~ screen.* ]]; then
PS1='\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[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
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
Os scripts acima funcionam no Linux e no Mac OS X (que é a razão pela qual você vê "2 > / dev / null ||" nos comandos stat, touch e date). Eu também uso um xterm de 256 cores e acredito que todo o código de suporte está incluído aqui. Apesar da duração deste post, eu tenho muito trim nos scripts / configs.
Tags bash gnu-screen bashrc