1

На Windows подключение к tmux 1.8 на CentOS 7 через MobaXterm.

В идеале, я хочу, чтобы в моих окнах tmux было имя последней команды, которую я набрал на любой активной панели (например, cd /home не bash как печатает {pane_current_command} ). Я понятия не имею, как это сделать, поэтому вместо этого я пытаюсь выяснить, как получить имя, совпадающее с 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 ответ1

0

Решено для 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() , заключенный в двойные кавычки, чтобы пробелы работали правильно.

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