Заставить имена окон tmux использовать bash $PS1

Заставить имена окон tmux использовать bash $PS1

В Windows подключение к tmux1.8 на CentOS 7 через MobaXterm.

В идеале я хочу, чтобы мои окна tmux имели имя последней команды, которую я ввел, в любой активной панели (например, cd /homeне bashкак {pane_current_command}prints). Я понятия не имею, как это сделать, поэтому вместо этого я пытаюсь выяснить, как заставить имя совпадать с именем PS1активной панели. Я пробовалпредложения в этом ответес этим в моем bashrc:

settitle() {
    printf "\033k$1\033\\"
}
basic_prompt='${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}'
PROMPT_COMMAND='if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi; settitle($basic_prompt)'
PS1='(\[\e[4m\]${USER:0:3}\[\e[0m\]@\[\e[34m\]${PWD:${#PWD}<15?0:(-15)}\[\e[m\])[$counter]\\$ '

и получил

bash: PROMPT_COMMAND: line 10: syntax error near unexpected token '$basic_prompt'

  1. Есть ли способ назвать окно tmux по последней выполненной команде?

  2. Если нет, как мне правильно настроить его на мой PS1, который является динамическим в зависимости от моего имени пользователя и пути?

решение1

Решено для tmux 2.6 и tmux 1.8 (проверено на обеих).

Чтобы tmuxотобразить динамический заголовок окна, отредактируйте его ~/.bashrcпримерно следующим образом:

settitle() {
    printf "\033k$1\033\\"
}
dynamic_window_title='${USER:0:3}@${PWD:${#PWD}<25?0:(-25)}'
PROMPT_COMMAND='if [ "$TERM" =~ "screen" ]; then eval prompt=$dynamic_window_title; settitle "$prompt"; fi;'

И вам (вероятно) понадобится ~/.tmux.confиметь:

setw -g automatic-rename on

Насколько я понимаю, settitle()это по сути переименование вашего окна после каждой выполненной вами команды. Я не совсем понимаю, как это происходит.

PROMPT_COMMANDэто часть bash, которая запускается после каждой выполняемой вами команды, что позволяет вам делать такие интересные вещи, какотслеживание того, сколько правильных команд bash вы ввели подряд, в дополнение к нашему использованию здесь постоянного переосмысления нашего названия.

$TERMэто переменная окружения, которая для меня установлена ​​либо на "screen" (или что-то вроде "screen-256color"), когда в tmux, либо на "xterm" при использовании MobaXterm. Мы проверяем это, потому что в противном случае ваш $PS1текст по сути печатается дважды, когда он не в tmux.

Должен dynamic_titleбыть в одинарных кавычках, иначе он будет определен при отправке ~/.bashrcи не будет динамическим. Однако вам нужно, чтобы он был определен в какой-то момент, иначе ваше окно будет переименовано буквально ${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}. Вот что evalпроисходит, создание строки, которая буквально является тем, что вы хотите, чтобы было в заголовке окна. Затем мы просто передаем эту строку в settitle(), заключенную в двойные кавычки, чтобы пробелы работали правильно.

Связанный контент