원격 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에 헤더를 설정할 수 있었습니다).
거의 다 온 것 같은데 제목 표시줄을 설정하기 위해 sh에 무엇을 주어야 하는지 알 수 없는 것 같습니다.
답변1
POSIX sh에서 좋은 프롬프트를 얻는 방법을 찾으려고 노력하는 동안 PS1의 sh 구현에서 해결해야 했던 두 가지 제한 사항에 부딪혔습니다.
\w
in var는PS1
작동 하지만$HOME
다음으로 확장되지는 않습니다.~
PS1
다음을 사용하여 터미널의 프롬프트를PS1
업데이트 할 수 있습니다. bash 또는 ksh를 사용하는 경우ESC
및BEL
문자가 헤더를 예상대로 설정하지 않습니다.
이것이 최종 결과이며 정말 잘 작동합니다. 이를 .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
.