
В Windows подключение к tmux
1.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'
Есть ли способ назвать окно tmux по последней выполненной команде?
Если нет, как мне правильно настроить его на мой
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()
, заключенную в двойные кавычки, чтобы пробелы работали правильно.