tmux 창 이름을 prompt_command, ps1 또는 원격 ssh 호스트 이름으로 바꾸시겠습니까?


25

내 tmux 창 제목을 prompt_command, ps1 또는 컴퓨터의 호스트 이름으로 자동으로 바꾸도록하고 싶습니다 ssh. "ssh"라는 9 개의 창이 열리면 실제로는 쓸모가 없습니다. sysadmin 작업하기 새 화면을 열고 수동으로 이름을 바꾸려면 ssh를 많이 사용하십시오.

내가 주목 한 것은 창 제목을 tmux업데이트하여 xterm알아야 할 것 같습니다.

어떤 도움? screen이 기능을 사용할 수 있다면 기꺼이 다시 돌아갈 것 입니다.

답변:


15

나는 그것이 당신을 PS1직접 볼 수있는 방법을 모른다 .

그러나 tmux창 이름을 설정하는 것과 동일한 명령을 이해합니다 screen.

당신은 당신의이 같은 함수를 정의 할 수 있습니다 그래서 ~/.bashrc~/.zshrc:

settitle() {
    printf "\033k$1\033\\"
}

settitle어디서나 전화 하세요.

예를 들어 PS1변수에 포함시킬 수 있습니다.

PS1='$HOST:$PWD$(settitle $HOST:$PWD)$ '

또는 통해 PROMPT_COMMAND:

PROMPT_COMMAND='$(settitle $HOST:$PWD)'
# and don't change PS1

이제 tmux데스크탑에서 실행 중이며 ssh명령이 아닌 호스트 이름을 사용하는 것이 ssh훨씬 쉽다는 것을 알고 있습니다.

settitlelocal에 추가 했으므로 다음을 ~/.bashrc추가하기 만하면됩니다.

ssh() {
    settitle "$*"
    command ssh "$@"
    settitle "bash"
}

bash를 zsh 또는 필요한 경우 더 적절한 것으로 바꾸십시오.


이것은 실제로 원격 시스템에서 .bashrc 설정을 사용하지 않고 창 제목을 원격 시스템의 호스트 이름으로 지정하지 않습니다. 매끄러운 것을 배웠지 만 감사합니다.
user68782

원하는 것이 로컬 쪽의 호스트 이름이면 훨씬 쉽습니다. 잠깐만 ...
Mikel

훌륭한! 고맙습니다. 요청을 설명 할 수 없어서 두 가지 질문이 생겼습니다. 다시 한번 감사합니다!
user68782

tmux가 변덕스러운 창 제목을 변경함에 따라, tmux의 창 제목이 정상적으로 변경되면이를 매우 빠르게 덮어 쓸 수 있습니다.
UtahJarhead

감사! 내가 사용 PROMPT_COMMAND='settitle $HOSTNAME:$PWD'- 미켈의 코드 @ 내가 어떤 호스트 이름과 얻지과 이후 -bash: : No such file or directory프롬프트 각 명령 이전에 오류가 발생했습니다. 그 날 것으로 보인다 $()무엇이든 실행하려고 비난 할 것 settitle 반환 . (Linux에서 bash를 실행 중입니다.)
tuomassalo

35

tmux rename-window -t${TMUX_PANE} "Title Text"

이것은 창에서 tmux 제목을 설정하는 올바른 방법입니다. $ TMUX_PANE 변수는 tmux에 의해 설정되며 다른 분할 창을 구별하는 데 사용됩니다.


2
그것이 활성 창이므로, 나는 그것이 필요하지 않다고 생각합니다 -t${TMUX_PANE}(적어도 나에게는 그렇지 않았습니다).
Christopher

8
@Christopher sleep 3Windows를 실행하고 말하고 전환하는 경우 절전 모드가 완료되면 프롬프트에서 잘못된 창으로 명령을 내립니다. (이것이 내가 여기에 온 이유입니다, +1).
quornian


8

Mikel과 UtahJarhead의 답변을 결합 .zshrc하여이 문제를 해결하기 위해 다음을 사용했습니다 .

ssh() {
    tmux rename-window "$*"
    command ssh "$@"
    exit
}

기본적으로 자동 창 이름 바꾸기가 활성화되어 있으며 원격 호스트를 종료 한 후 다시 활성화하는 방법을 찾을 수 없습니다. 따라서 작업 흐름에 문제가 아닌 창을 완전히 종료합니다. 이름을 'bash'로 바꾸려면 exit줄을로 바꿀 수 tmux rename-window "bash"있습니다.


1
hostname -sssh "@ $"명령 뒤에 tmux rename-window를 사용하고 있는데 기본적으로 "게이트웨이"시스템에 제목을 "재설정"합니다.
andrei

7

대신 exit또는 tmux rename-window "bash"사용할 수 있습니다

ssh() {
    if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
            tmux rename-window "$*"
            command ssh "$@"
            tmux set-window-option automatic-rename "on" 1>/dev/null
    else
            command ssh "$@"
    fi
}

다음 명령의 창 이름이 자동으로 바뀌는 일반 기능이 다시 활성화됩니다.

if블록 은 다른 쉘 tmux에서 ssh사용되는 명령 에서 현재 창 이름을 바꾸지 (않거나) 방지 합니다 tmux.


나는 물건 if env | grep -q "TMUX_PANE"; then대신에 ps -p...같은 원리로 갔다 .
atomicules

1

나는 이것이 오래 전에 응답되었다는 것을 알고 있지만, 내가 받아 들인 것을 추가 할 것이라고 생각했습니다 (허용 된 답변에 따라). 나는 이것을 모든 서버의 / etc / bashrc에 추가했습니다 직물, 꼭두각시 등으로하십시오)

settitle() {
    printf "\033k$1\033\\"
}
bash_prompt_command() {
    settitle "`hostname -s`:$PWD"
}
PROMPT_COMMAND=bash_prompt_command

그리고 화면 이름 또는 tmux에서 창 이름을 자동으로 설정합니다.


우리는 내부 DNS를 사용하므로 hostname -s여분의 도메인 항목을 제거하여 server1.internal.local이 server1으로 표시됩니다
Brian

1

또 다른 해결책은 ssh 세션 후에 활성 창의 이름을 이전 이름으로 바꾸는 것입니다.

ssh() {

local code=0
local ancien

ancien=$(tmux display-message -p '#W')

if [ $TERM = tmux -o $TERM = tmux-256color ]; then

    tmux rename-window "$*"

    command ssh "$@"

    code=$?
else
    command ssh "$@"

    code=$?
fi

tmux rename-window $ancien

return $code
}

0

이는 tmux 2.1zsh와 로컬 및 서버 에서 작동 합니다.

ssh() {
    tmux set-option allow-rename off 1>/dev/null
    tmux rename-window "ssh/$*"
    command ssh "$@"
    tmux set-option allow-rename on 1>/dev/null
}

Windows 이름을 변경하기 전에 allow-rename 옵션을 수동으로 비활성화해야했습니다. 그렇지 않으면 대부분의 서버에서 현재 경로로 변경되었습니다 (또한 zsh를 사용함). 좋은 점은 allow-rename 옵션을 다시 활성화하면 즉시 작동합니다.


0

.profile또는에 추가.bashrc

# Change window name for `tmux`
ssh() {
    if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
        #tmux rename-window "$(echo $* | cut -d . -f 1)"
        tmux rename-window "$(echo $* | cut -d @ -f 2)"
        command ssh "$@"
        tmux set-window-option automatic-rename "on" 1>/dev/null
    else
        command ssh "$@"
    fi
}

0

이 모든 예제에서 다음을 참고하십시오.

command ssh "$@"

종료 코드를 잡고 함수를 종료하고 싶을 수도 있습니다.

ssh server false

0을 반환합니다.

command ssh"$@"
_exitcode=$?
#other code
exit $_exitcode

ssh의 리턴 코드로 ssh를 종료합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.