2015-08-31

RHEL7: screen: Window title is annoying

screen 使いが RHEL7 を使った時、間違いなく不満に思うこと。

ウィンドウタイトルが ウ ザ い

無駄に長いし、cd する度に長さがパタパタ変わるし、ディレクトリを潜る度にどんどん長くなるし、そのせいで簡単に横幅が溢れるし、とても我慢できたものではない。何故これが初期設定なのか理解不能。誰か喜ぶ人いるの?

調べると、PROMPT_COMMAND のせいらしい。手持ちの環境でざっと比べると、

CentOS 5.5: /etc/bashrc:

# are we an interactive shell?
if [ "$PS1" ]; then
	case $TERM in

	# <...snip...>

	screen)
		if [ -e /etc/sysconfig/bash-prompt-screen ]; then
			PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
		else
		PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\033\\"'
		fi
		;;

CentOS 6.2: /etc/bashrc:

    screen)
        if [ -e /etc/sysconfig/bash-prompt-screen ]; then
            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
        else
            PROMPT_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
        fi
        ;;

RHEL7.1: /etc/bashrc:

    screen*)
      if [ -e /etc/sysconfig/bash-prompt-screen ]; then
          PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
      else
          PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
      fi
      ;;

実は各バージョンで微妙に違った。ともかく、RHEL7 の設定だけは看過できない。暫く考えて、次のスクリプトを配置することにした。

/etc/profile.d/myscreen.sh:

if [ -n "$PROMPT_COMMAND" ] ; then
    case "$TERM" in
	screen*) PROMPT_COMMAND=${PROMPT_COMMAND/\\033*\\033/\\033k\\033} ;;
    esac
fi

(嬉しい)副作用として、.screenrc に下記の設定を入れると、ウィンドウタイトルが実行中のコマンド名になる。root でなく一般ユーザーなら、「#」の代わりに「$」を使う。確認はしていないが、RHEL6 以前でも動くはず。

~/.screenrc:

shelltitle "#|bash"

RHEL7 のこの仕打ちは、tmux 使いの嫌がらせ 老兵は去れというメッセージかも知れないが、老兵と言えども消えゆくにはまだ早い。screen であと十年は戦える。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。