shelltitle
tmux에서 GNU Screen의 기능을 에뮬레이션 하려고 합니다 . 내 안에는 다음이 있습니다 ~/.bashrc
.
if [[ "$TERM" == screen* ]]; then
SCREEN_ESC='\[\ek\e\\\]'
else
SCREEN_ESC=''
fi
PS1="\n\w ${SCREEN_ESC}$ "
그리고 내 다음 ~/.screenrc
:
shelltitle "$ |bash"
설정 shelltitle
하면 GNU Screen이 셸에서 개행 문자를 검색하고 $PS1
이스케이프 문자로 시작하는 모든 문자를 제거하고 그 이후에 발견된 첫 번째 단어로 바꿉니다. 이것은
매뉴얼 페이지:
작동 방법은 다음과 같습니다. 빈 헤더 이스케이프 시퀀스(<esc>k<esc>)를 프롬프트의 일부로 출력하려면 쉘 프롬프트를 수정해야 합니다. 프롬프트의 마지막 부분은 제목의 검색 부분에 지정한 문자열과 동일한 문자열이어야 합니다. 일단 설정되면 화면은 title-escape-sequence를 사용하여 이전 명령 이름을 지우고 다음 명령을 준비합니다. 그런 다음 쉘에서 개행 문자를 수신하면 프롬프트의 끝을 검색합니다. 발견되면 일치하는 문자열 뒤의 첫 번째 단어를 가져와 이를 명령 이름으로 사용합니다. 명령 이름이 "!", "%" 또는 "^"로 시작하는 경우 화면에서는 방금 찾은 이름보다 다음 줄(찾은 경우)의 첫 번째 단어를 선호합니다.
set-option -g set-titles on
이는 프로세스 이름만 캡처하는 tmux와 다릅니다 . 따라서 Python 스크립트의 제목은 Screen(내가 원하는 방식) script.py
이 되고 제목은 tmux(내가 원하지 않는 방식)가 됩니다.script.py
python
한 사람이 할 수 있다는 걸 알아요tmux 창 이름 바꾸기통과:
printf '\033kWINDOW_NAME\033\\'
그래서 새로운 명령을 입력했음을 tmux에 알릴 수 있는 방법이 있는지 궁금합니다. 마지막 명령을 입력할 수 있는 방법이 있다면 Bash를 사용하여 PROMPT_COMMAND
수행할 수 있습니다. 어떤 아이디어가 있나요?
답변1
아아, 몇 년 후, 해결책이 나왔습니다! tmux 및 누락된 화면 동작과 동일한 문제가 있었습니다. 간단히 말해서:
에 추가하세요.bashrc
if [ -v "TMUX" ]; then
PS0='$(printf "\033k%s\033" "$(HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//")")'
PROMPT_COMMAND="printf '\033kBASH\033\\'"
이tmux.conf
set -g allow-rename on
설명을 보려면 bashrc
다음 PS0
을 살펴보세요.
Bash 쉘에서 실행된 각 명령을 변수에 전달
PROMPT_COMMAND
Bash를 반환할 때 레이블로 사용 하고 있으므로 BASH
원하는 대로 넣을 수 있습니다(예: >_
). 또는 이를 생략 PROMPT_COMMAND
하고 마지막으로 실행된 명령을 유지하여 레이블에 표시할 수 있습니다.