다른 시스템에 SSH 원격 로깅 후 터미널 제목 수정 있습니다. print(“\e]0;@ARGV\7”); 그러나 다른 원격 컴퓨터로 ssh 한

지금은 한 줄의 펄 코드를 사용하여 터미널 표시 줄의 제목을 변경하고 있습니다.

print("\e]0;@ARGV\7");

그러나 다른 원격 컴퓨터로 ssh 한 후에는 제목이 호스트에 의해 수정됩니다 (특히 귀찮게하지 않음). 그러나 연결을 종료 한 후에도 수정 된 제목이 남아 있습니다. 이 문제를 해결하는 방법이 있습니까? 본질적으로 로컬에서 작동 할 때 터미널의 제목을 고정하고 싶습니다.

저는 주로 CentOS 또는 Debian에서 xfce 터미널과 터미네이터를 사용합니다. 감사.

편집하다

또 다른 미묘한 점은 모든 터미널의 이름이 동일하기 때문에 제목을 즉시 편집 할 수는 있지만 SSH 세션에서 내가 편집 한 내용을 수정하는 것을 금지한다는 것입니다.



답변

창 제목에 대해서는 잘 모르지만 실제로 ssh 세션을 종료 한 후 시스템에서 ssh 세션을 종료하는 작업을 수행하려고했습니다. 요컨대, 그것은 그렇게 작동하지 않습니다. 기본적으로 세 가지 선택이 있습니다.

  1. ssh 주위에 래퍼를 작성하십시오. 즉, 중간에 어딘가에 라인을 포함하는 $ PATH에서 ssh우선 하는 실행 쉘 스크립트를 작성 /usr/bin/ssh하십시오 exec /usr/bin/ssh $@. 이를 통해 유효 ssh 바이너리가 실행되기 전과 후에 셸에서 일부 작업을 수행 할 수 있으며 동시에 오버 헤드를 최소화 할 수 있습니다.

  2. 선택한 SSH 소스에 대해 패치를 작성하여 명령 행 또는 일부 구성 설정을 통해 전달 된 쉘 명령을 실행하는 정리 후크를 제공하십시오. 그것이 우리가 원하는 것입니다.

  3. 유무는 PROMPT_COMMAND의 출력을 평가 history. 기본적으로 1에 대한보다 일반적이고 추악한 접근법.


답변

해결책 : ssh 및 su 명령 다음 에 작업을 수행하기 위해 ~ / .bashrc 함수를 추가하십시오.

function title()
{
   # change the title of the current window or tab
   echo -ne "\033]0;$*\007"
}

function ssh()
{
   /usr/bin/ssh "$@"
   # revert the window title after the ssh command
   title $USER@$HOST
}

function su()
{
   /bin/su "$@"
   # revert the window title after the su command
   title $USER@$HOST
}

참고 : ~ / .bashrc를 편집 한 후 bash를 다시 시작하십시오.

예:

# title is "user1@boxA"
ssh boxB  # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()

희망이 도움이됩니다.


답변

동일한 메커니즘을 사용하여 터미널 제목을 적절하게 설정하도록 로컬 쉘 도트 파일 (예 : $PROMPT_COMMANDin ~/.bashrc)을 구성하십시오 .

예를 들면 다음과 같습니다.

export PROMPT_COMMAND="printf '\e]0;bash\7\n'"

답변

이 줄을 ~ / .bashrc에 추가하십시오.

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

    ;;
*)
    ;;
esac

데비안 기반 리눅스와 잘 작동


답변

한 가지 해결책은 ssh’ing 전에 터미널 변수를 vt100으로 변경하는 것입니다.

export TERM=vt100

이것은 일반적으로 초기화 스크립트가 터미널 변수를보고 xterm이라는 제목으로 만 변경하기 때문에 작동합니다. 대체 화면, 색상 및 기타 멋진 기능을 잃어 버릴 수도 있습니다.

로컬 터미널을 xterm으로 유지하려면 alias ssh를 사용하여 터미널 변수를 즉석에서 변경하십시오.

alias ssh='TERM=vt100 /usr/bin/ssh'

답변

내 .bashrc 파일의 PS1에 이것을 추가 하여이 문제를 해결했습니다.

\[\e]2;\u@\H:\w\a\]

따라서 전체 줄은 다음과 같습니다 (PS를 사용자 정의했습니다! :

export PS1='\[\e]2;\u@\H:\w\a\]\n($LOGNAME@$HOSTNAME) \t\n[$PWD]: '

나는 그것이 다른 사람들을 돕기를 바랍니다.


답변

SSH를 종료하면 다른 답변이 작동하지 않지만 닫았습니다. 원격 SSH 세션을 종료하면 setw 자동 이름 바꾸기를 추가하면 자동으로 이름이 바뀌고 더 이상 창을 종료하지 않아도 재설정 할 수 있습니다. [1 월. 2018-데비안 9]

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