
Windows에서는 tmux
MobaXterm을 통해 CentOS 7의 1.8에 연결합니다.
이상적으로는 내 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'
마지막으로 완료된 명령으로 tmux 창의 이름을 지정하는 방법이 있습니까?
PS1
그렇지 않은 경우 내 사용자 이름과 경로를 기반으로 동적인 my 로 올바르게 설정하려면 어떻게 해야 합니까 ?
답변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
tmux에서 "screen"(또는 "screen-256color"와 같은 것)으로 설정되거나 MobaXterm을 사용할 때 "xterm"으로 설정되는 환경 변수입니다. 그렇지 않으면 $PS1
tmux가 아닐 때 기본적으로 이중 인쇄되기 때문에 이를 확인합니다 .
작은따옴표로 묶어야 dynamic_title
합니다. 그렇지 않으면 소스를 제공할 때 정의되며 ~/.bashrc
동적이 아닙니다. 그러나 어느 시점에서 이를 정의해야 합니다. 그렇지 않으면 창 이름이 문자 그대로 변경됩니다 ${USER:0:3}@${PWD:${#PWD}<15?0:(-15)}
. 이것이 바로 eval
창 제목을 문자 그대로 원하는 문자열을 만드는 것입니다. 그런 다음 settitle()
공백이 올바르게 작동하도록 큰따옴표로 묶은 해당 문자열을 에 제공합니다 .