5

После перехода на использование .bashrc вместо .bash_profile (мне не понравилось, как терминал по умолчанию работал с одним файлом конфигурации и утилитами, такими как 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

5 ответов5

6

Перейдите в Настройки Iterm> Профили> Терминал

Снимите флажок «Терминал может установить заголовок вкладки / окна»

Теперь вы можете назвать вашу вкладку, ssh на сервере, выйти и сохранить прежнее имя вкладки.

Кредит: https://groups.google.com/forum/#!topic/iterm2-discuss/czV-sv4ykzI

Ура, Алан

5

Убедитесь, что $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"
}

Он используется для добавления текущего рабочего каталога в строку заголовка терминала.

4

Чтобы запретить хостам, в которых вы используете ssh, изменять заголовок, обычно

export TERM=vt100

перед тем как ssh сделает свое дело, потому что файлы инициализации по умолчанию (bashrc и т. д.) смотрят на переменную терминала и изменяют заголовок только в том случае, если терминалом является xterm (что в настоящее время является стандартом де-факто).

Примечание: с помощью этого трюка вы теряете как минимум "альтернативный экран", цвета и, возможно, другие необычные функции терминала, которые вы можете или не можете оценить.

1

Спасибо всем здесь. Я наконец-то понял, что мне нужно.

  1. Простое сохранение имен локальных вкладок бесполезно для меня, потому что я специально имею дело с ssh в ящики.

  2. Я использую цвета в своем терминале, и я не хочу отключать цвета, как в случае с решением Viljo.

В частности, на моем локальном компьютере запущено несколько бродячих ящиков, и я держу вкладки открытыми для нескольких из них. Я хочу легко установить имя вкладки для версии ОС vagrant box, и пусть она останется такой. Я держу открытые вкладки в течение долгого времени, поэтому я не возражаю задавать имя вручную, но его не нужно сбрасывать обратно автоматически.

Кроме того, так как это бродячие ящики, я не хочу менять их настройки, которые мне придется изменить позже, если я vagrant destroy .

Итак, мои выводы:

В CentOS 6 код обновления имени вкладки помещается в $PROMPTNAME . Его можно нейтрализовать и установить имя табуляции в одной команде, выполнив:

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

В Ubuntu код обновления имени вкладки находится непосредственно в $PS1 ; он добавляется к уже установленному значению $PS1 помощью ~/.bashrc . Это может быть отменено, и имя табуляции можно установить в одной команде, выполнив:

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

Нашел (частично) ответ. Если эта часть закомментирована:

# 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

Названия вкладок сохраняются до тех пор, пока вы находитесь на локальном компьютере. Сервер все еще меняет их.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .