web-dev-qa-db-ja.com

itermタブタイトルの自動変更を停止するにはどうすればよいですか?

.bashrcの代わりに.bash_profileを使用するように切り替えた後(デフォルトのターミナルが1つの構成ファイルでどのように機能し、screenのようなユーティリティが別のファイルでどのように機能するかが気に入らなかった)、iterm2の動作が変わりました。以前は、タブタイトルを手動で設定すると、別のサーバーにsshしていない限り、タブタイトルはそこに残り、その時点でタイトルはusername@otherservername: /location/in/other/servers/filesystemに変更されていました。これで、タブのタイトルを変更しても、そのタブで最初に実行するコマンドまで変更されたままになります。何かを実行するとすぐに、タブのタイトルがmyusername@mymacname: /my/location/in/my/mac/filesystemに切り替わります。

コマンドライン引数を使用すると、echo -ne "\e]1;tab title\a"は役に立ちません。切り替わります(画面上のタイトルの変更に気付くのに十分遅い)が、コマンドが終了すると、タイトルは以前のmyusername@mymacname: /my/location/in/my/mac/filesystemに戻ります。

理想的には、別のサーバーにsshするときを含め、タブのタイトルが自動的に切り替わらないようにしたいと思います。それが不可能な場合は、前の動作に戻したいと思います。ローカルマシンを使用している限り、設定したタブタイトルを保持します。それはできますか?

これが私の.bashrcファイルです:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
# don't overwrite GNU Midnight Commander's setting of `ignorespace'.
export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups
# ... or force ignoredups and ignorespace
export HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(Shell=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the Prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy Prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color) color_Prompt=yes;;
esac

# uncomment for a colored Prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the Prompt
force_color_Prompt=yes

if [ -n "$force_color_Prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_Prompt=yes
    else
    color_Prompt=
    fi
fi

if [ "$color_Prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;36m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_Prompt force_color_Prompt

# If this is an xterm set the title to user@Host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

#if [ -f ~/.bash_aliases ]; then
#    . ~/.bash_aliases
#fi

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=auto -hF'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi
source ~/.local/bin/bashmarks.sh

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$HOME/bin:$PATH
export MANPATH=/opt/local/man:$MANPATH
export CLICOLOR=1
export LSCOLORS=ExFxCxDxBxegedabagacad
7
executor21

(部分的に)答えが見つかりました。この部分がコメントアウトされている場合:

# If this is an xterm set the title to user@Host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

つまり:

# If this is an xterm set the title to user@Host:dir
#case "$TERM" in
#xterm*|rxvt*)
#    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
#    ;;
#*)
#    ;;
#esac

ローカルマシンを使用している限り、タブのタイトルは保持されます。サーバーはまだそれらを変更します。

1
executor21

Itermの設定>プロファイル>ターミナルに移動します

チェックを外す「ターミナルがタブ/ウィンドウのタイトルを設定する可能性があります」

これで、タブに名前を付け、サーバーにSSHで接続し、終了しても元のタブ名を保持できます。

クレジット: https://groups.google.com/forum/#!topic/iterm2-discuss/czV-sv4ykzI

乾杯、アラン

8
user776021

実行して$Prompt_COMMANDが設定されていないことを確認してください

echo $Prompt_COMMAND

出力が空でない場合、そのスクリプトは、プロンプトがシェルによって表示される直前に実行されます。


OS X Lionでは、デフォルト値はupdate_terminal_cwdであり、次のようになります。

$ type update_terminal_cwd
update_terminal_cwd is a function
update_terminal_cwd () 
{ 
    local SEARCH=' ';
    local REPLACE='%20';
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}";
    printf '\e]7;%s\a' "$PWD_URL"
}

これは、現在の作業ディレクトリをターミナルのタイトルバーに追加するために使用されます。

5
Daniel Beck

Sshを使用するホストがタイトルを変更できないようにするには、通常は

export TERM=vt100

デフォルトの初期化ファイル(bashrcなど)は端末変数を調べ、端末がxterm(現在は事実上の標準)である場合にのみタイトルを変更するため、sshがトリックを実行する前に。

注:このトリックを使用すると、少なくとも「代替画面」、色、およびおそらく他の種類の豪華な端末機能が失われます。

4
Viljo Viitanen

ここにいるみんなに感謝します。私は最終的に私が何をする必要があるかを理解しました。

  1. 私は特にボックスへのsshを扱っているので、ローカルタブ名を保持するだけでは役に立ちません。

  2. 私は端末で色を使用していますが、Viljoのソリューションのように色を無効にしたくありません。

具体的には、ローカルマシンで複数のvagrantボックスを実行しており、それらのいくつかに対してタブを開いたままにします。タブ名をOSバージョンのvagrantboxに簡単に設定し、そのままにしておきたい。タブを長時間開いたままにしているので、名前を手動で設定してもかまいませんが、自動的にリセットする必要はありません戻る

また、これらのare vagrant boxなので、vagrant destroyの場合、後で再度変更する必要がある設定を変更したくありません。

だから、私の発見:

CentOS 6では、タブ名更新コードは$PROMPTNAMEに配置されます。次のコマンドを実行することで、中和してタブ名を1つのコマンドで設定できます。

Prompt_COMMAND="" && printf '\e]1;%s\a' "CentOS 6.6"

Ubuntuでは、タブ名更新コードは直接$PS1にあります。すでに設定されている$PS1の値の前に~/.bashrcが追加されます。これを元に戻し、タブ名を1つのコマンドで次のコマンドを実行して設定できます。

PS1="${PS1##*\}}" && printf '\e]1;%s\a' "Ubuntu 14.04"
1
Wildcard