ssh에서 tmux의 윈도우 이름을 좋은 느낌으로 만듭니다.

4773 단어 tmuxZsh
많은 서버에서 작업 할 때 tmux의 창 이름이 ssh로 가득 차게 될 수 있습니다.



그러나이 때 중요한 것은 각 창이 어떤 서버에 연결되어 있는지 정보입니다.
따라서 zshrc에 ssh 함수를 만들고 ssh가 실행되면 호스트 이름을 창 이름으로 rename합니다.

조사해 보면 이러한 선행 예 [1]이 있습니다.
ssh() {
    if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
        tmux rename-window "$(echo $* | cut -d . -f 1)"
        command ssh "$@"
        tmux set-window-option automatic-rename "on" 1>/dev/null
    else
        command ssh "$@"
    fi
}

이것으로도 충분히 실용으로 충분하지만, 하나 문제가 있습니다.
ssh를 실행할 때 옵션을 지정했다고 가정합니다.
ssh -N hostname

이 때 앞의 ssh 함수의 tmux rename-window "$(echo $* | cut -d . -f 1)" 행에 주목합시다.$*에서 ssh 명령의 모든 인수를 전달했기 때문에 명령 주입과 같은 일이 발생합니다.
결과적으로 tux rename-window는 다음과 같은 오류를 반환합니다.
rename-window: illegal option -- N
usage: rename-window [-t target-window] new-name

이 경우 함수의 마지막 인수를 rename-window에 전달하면 좋을 것 같습니다.
쉘 스크립트에서는 함수의 인수를 여러 가지 방법으로 취득할 수 있습니다.
마지막 인수는 ${@: -1}에 의해 검색됩니다.
인수의 취급이 올바른지 잘 모르겠지만, 자세히 알고 싶은 분은 [2][3]당을 자세히 읽으면 좋을지도 모릅니다.

수정 된 ssh 함수는 다음과 같습니다.
ssh() {
  if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
    tmux rename-window ${@: -1} # <---- ここ
    command ssh "$@"
    tmux set-window-option automatic-rename "on" 1>/dev/null
  else
    command ssh "$@"
  fi
}



눈에 띄는 tmux가 보기 쉬워졌습니다.

참고



[1] htps : // bg. 노파 c. 아 t/2015/04/21/세 tt t x-파네-치 tぇ-온-sh
[2] ぃ tp // 코 m / 쟈야 r uuntsun / ms / 0 4cb66d8f4bd2 A337
[3] htps : // 후미야 s. 기주 b. 이오/2016/12/15/포시치오나 l 파라메 rs. sh-a dゔ ぇ t - ぇ r. HTML

좋은 웹페이지 즐겨찾기