sh를 기본 셸로 사용하여 원격 컴퓨터에 연결한 후 제목 표시줄이 자동으로 동적으로 업데이트되도록 하려면 어떻게 해야 합니까?

sh를 기본 셸로 사용하여 원격 컴퓨터에 연결한 후 제목 표시줄이 자동으로 동적으로 업데이트되도록 하려면 어떻게 해야 합니까?

원격 Ubuntu 시스템에 연결할 때마다 gnome-terminal은 "$USER"@"$(hostname -s)": "$PWD". 명령을 실행하십시오.

sh를 기본 쉘로 사용하여 FreeBSD 시스템에 사용자로 연결하면 gnome-terminal의 헤더가 업데이트되지 않습니다.

.shrc 파일에 다음을 넣었습니다.

PS1='['"$USER"'@\h \w'
case "$USER" in
    root)
        PS1="${PS1}]# "
        ;;
    *)
        PS1="${PS1}]$ "
        ;;
esac

esc="$(printf '\033')"
bel="$(printf '\007')"

case "$TERM" in
    xterm)
        #cannot get this part to work
        PS1='['"${esc}"'0;'"${USER}"'@\h \w'"$bel"']'"$PS1"
        ;;
    *)
        ;;
esac

그래서 여기에 문제가 있습니다. 유용한 리소스를 많이 찾았지만 POSIX 호환 sh 를 사용하여 헤더를 설정하는 방법을 나타내는 리소스는 없습니다. 이것이 제가 가장 유용하다고 생각한 것입니다(실제로 이것을 참조로 사용하여 bash 및 ksh에 헤더를 설정할 수 있었습니다).

xterm의 제목을 변경하는 방법: 다른 쉘의 예

거의 다 온 것 같은데 제목 표시줄을 설정하기 위해 sh에 무엇을 주어야 하는지 알 수 없는 것 같습니다.

답변1

POSIX sh에서 좋은 프롬프트를 얻는 방법을 찾으려고 노력하는 동안 PS1의 sh 구현에서 해결해야 했던 두 가지 제한 사항에 부딪혔습니다.

  1. \win var는 PS1작동 하지만 $HOME다음으로 확장되지는 않습니다.~

  2. PS1다음을 사용하여 터미널의 프롬프트를 PS1업데이트 할 수 있습니다. bash 또는 ksh를 사용하는 경우 ESCBEL문자가 헤더를 예상대로 설정하지 않습니다.

이것이 최종 결과이며 정말 잘 작동합니다. 이를 .shrc 파일에 추가해야 합니다(먼저 PS1이 아직 정의되지 않았는지 확인하세요).

update_prompt() {
    case "$PWD" in
        "$HOME"*)
            pretty_pwd="~${PWD#*"${HOME}"}"
            ;;
        "/usr$HOME"*)
            pretty_pwd="~${PWD#*"/usr${HOME}"}"
            ;;
        *)
            pretty_pwd="$PWD"
            ;;
    esac

    case "$TERM" in
        xterm*|rxvt*)
            PS1="($USER@\\h $pretty_pwd)\\$ "
            ;;
        *)
            ;;
    esac

    printf "\\033]0;(%s@$(hostname -s): %s)\\007" "$USER" "$pretty_pwd"
}

update_prompt

cd() {
    command cd "$@" && update_prompt
}

프롬프트는 괄호 안에 표시됩니다. 이것은 내가 Ubuntu가 아닌 FreeBSD를 사용하고 있다는 것을 나 자신에게 개인적으로 상기시켜주는 것입니다. 보다 전통적인 프롬프트를 선호한다면 다음을 사용하세요.

update_prompt() {
    case "$PWD" in
        "$HOME"*)
            pretty_pwd="~${PWD#*"${HOME}"}"
            ;;
        "/usr$HOME"*)
            pretty_pwd="~${PWD#*"/usr${HOME}"}"
            ;;
        *)
            pretty_pwd="$PWD"
            ;;
    esac

    case "$TERM" in
        xterm*|rxvt*)
            PS1="$USER@\\h $pretty_pwd\\$ "
            ;;
        *)
            ;;
    esac

    printf "\\033]0;%s@$(hostname -s): %s\\007" "$USER" "$pretty_pwd"
}

update_prompt

cd() {
    command cd "$@" && update_prompt
}

"/usr$HOME"*)Linux를 사용하는 경우 이 조건을 제거할 수 있습니다. /home일반적으로 FreeBSD를 사용하지 않는 한 아무 소용이 없습니다 /usr/home.

관련 정보