.bashrc
を使用してGNU Screenを起動しようとしています。もうすぐです:
if [ -z "$STY" ]; then
exec screen -dR
else
exec gnome-terminal
fi
しかし、これは間違っています!最初のケースは機能します。ターミナルを開くとscreen
が起動します。しかし、2番目の部分は失敗します。すでにターミナルを開いている場合は、通常のターミナルを開きたいです。しかし、これは無限の数の端末を開くだけです...
あなたは(他の後に)試すことができます:
if [ "$HAS_STARTED_TERM"!="1"]; then
HAS_STARTED_TERM=1
export HAS_STARTED_TERM
exec gnome-terminal
fi
私が間違っていなければ、「else」ブロックを削除するだけでターミナルは正常に開きます...または何かが足りないのかもしれません。
設定方法は、接続するすべてのサーバーで画面が表示されている場合に画面を起動します。切断して再接続すると、同じ画面セッションが再接続されます。これまでのところ良さそうです、それは誰もが望んでいることです。しかし、画面で複数のウィンドウを開いている場合、それらを閉じずに切断するにはどうすればよいですか? 2つのオプションがあります:
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='\[\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
#[email protected]#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=''
#[email protected]#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
上記のスクリプトは、LinuxとMac OS Xの両方で機能します(これが、stat、touch、およびdateコマンドに「2>/dev/null ||」が表示される理由です)。私も256色のxtermを使用しており、すべてのサポートコードがここに含まれていると思います。この投稿の長さにもかかわらず、私はスクリプト/構成から多くを削除しました。