Bagaimana cara saya berhenti mengubah judul tab iterm secara otomatis?

5

Setelah beralih menggunakan .bashrc dari pada .bash_profile (Saya tidak suka bagaimana terminal default bekerja dengan satu file konfigurasi dan seperti utilitas screen dengan yang lain), perilaku iterm2 berubah. Sebelumnya, ketika saya mengatur judul tab secara manual, mereka akan tetap di sana kecuali saya ssh akan masuk ke server lain, di mana judul akan berubah menjadi username@otherservername: /location/in/other/servers/filesystem. Sekarang, ketika saya mengubah judul tab, mereka tetap demikian sampai perintah pertama saya jalankan di tab itu. Segera setelah saya menjalankan sesuatu, judul tab beralih ke myusername@mymacname: /my/location/in/my/mac/filesystem.

Menggunakan argumen baris perintah, echo -ne "\e]1;tab title\a" tidak membantu. Itu beralih (cukup lambat untuk melihat perubahan judul di layar), tetapi ketika perintah keluar, judul kembali ke tempat sebelumnya: myusername@mymacname: /my/location/in/my/mac/filesystem.

Idealnya, saya ingin judul tab untuk TIDAK PERNAH beralih secara otomatis, termasuk ketika saya ssh ke server lain. Jika itu tidak memungkinkan, saya ingin kembali ke perilaku sebelumnya: selama saya menggunakan mesin lokal, pertahankan judul tab yang saya atur. Bisakah itu dilakukan?

Ini file .bashrc saya:

# ~/.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
executor21
sumber

Jawaban:

5

Yakinkan $PROMPT_COMMAND tidak diatur dengan berjalan

echo $PROMPT_COMMAND

Jika outputnya tidak kosong, skrip itu dijalankan tepat sebelum prompt ditampilkan oleh shell.


Pada OS X Lion, nilai standarnya adalah update_terminal_cwd, dan terlihat seperti ini:

$ 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"
}

Ini digunakan untuk menambahkan direktori kerja saat ini ke bilah judul Terminal.

Daniel Beck
sumber
4

Untuk mencegah host Anda ssh dari mengubah judul, biasanya lakukan

export TERM=vt100

sebelum Anda ssh melakukan trik, karena file inisialisasi default (bashrc dll) melihat variabel terminal dan hanya mengubah judul jika terminal xterm (yang saat ini adalah standar de facto).

Catatan: dengan trik ini Anda kehilangan setidaknya "layar alternatif", warna, dan mungkin fitur terminal mewah lainnya yang mungkin Anda hargai atau mungkin tidak Anda hargai.

Viljo Viitanen
sumber
Tidak hanya akhirnya saya bisa membuat tab saya dinamai dengan benar, saya tidak lagi harus memulai setiap sesi ssh dengan unalias -a lagi untuk menghindari warna.
CodeReaper
1

Ditemukan (sebagian) jawaban. Jika bagian ini dikomentari:

# 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

yaitu.:

# 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

Judul tab dipertahankan selama Anda berada di mesin lokal. Server masih mengubahnya.

executor21
sumber
1
Lihatlah ke default mesin jarak jauh PS1: Masuk echo $PS1 pada baris perintah untuk melihatnya, masukkan PS1='\$' untuk mengaturnya ke nilai minimal untuk menguji apakah pengaturan itu bertanggung jawab untuk mengubah judul jendela Anda.
Daniel Beck
1

Terima kasih untuk semuanya di sini. AKU AKHIRNYA menemukan apa yang harus kulakukan.

  1. Hanya menyimpan nama tab lokal tidak berguna bagi saya karena saya secara khusus berurusan dengan ssh ke dalam kotak.

  2. Saya menggunakan warna di terminal saya dan saya tidak ingin menonaktifkan warna seperti solusi Viljo.

Secara khusus, saya menjalankan beberapa kotak gelandangan di mesin lokal saya dan saya tetap membuka tab untuk beberapa dari mereka. Saya ingin dengan mudah mengatur nama tab ke versi OS dari kotak gelandangan, dan tetap seperti itu. Saya menjaga tab terbuka untuk waktu yang lama, jadi saya tidak keberatan mengatur nama secara manual, tetapi tidak perlu diatur ulang kembali secara otomatis.

Juga, karena ini adalah kotak gelandangan, saya tidak ingin mengubah pengaturan pada mereka bahwa saya harus mengubah lagi nanti jika saya vagrant destroy.

Jadi, temuan saya:

Pada CentOS 6, kode pembaruan nama tab ditempatkan $PROMPTNAME. Ini dapat dinetralkan dan tabname diatur dalam satu perintah dengan menjalankan:

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

Di Ubuntu, kode pembaruan nama tab langsung masuk $PS1; itu akan ditambahkan ke nilai yang sudah ditetapkan dari $PS1 oleh ~/.bashrc. Ini dapat dikembalikan dan tabname diatur dalam satu perintah dengan menjalankan:

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