동적 라인을 사용하여 Solaris KSH 설정 PS1

동적 라인을 사용하여 Solaris KSH 설정 PS1

두 줄로 프롬프트(PS1)를 구성하고 싶습니다. 첫 번째 줄 끝에서 모든 공백(줄 끝에서 터미널의 오른쪽 테두리까지)을 한 줄로 채우고 싶습니다(예: _______ ).

어떻게 해야 하나요?

내 현재 팁은 다음과 같습니다.

export PS1="$(echo "\033[37mroot@\033[34m`hostname`:\033[31m\${PWD}# \033[0m")"

인쇄:

root@myhost:/export/home/myid# 

나는 그것이되기를 원합니다 :

root@myhost:/export/home/myid____________________________________________
#

나중에 PWD 이후에 더 많은 콘텐츠를 추가할 계획입니다.

시스템은 솔라리스 10이고 쉘은 eksh입니다.

5.10 Generic_144488-17 sun4v sparc SUNW
#eksh --version
  version         sh (AT&T Research) 93t+ 2009-05-01

여기에서 뭔가를 찾았지만 작동하지 않습니다.교차 터미널 라인

답변1

ksh93의 경우( eksh분명히 /usr/bin/kshSolaris 11을 사용하는 것과 같습니다):

LOGNAME=$(logname)
HOSTNAME=$(hostname)

PS1='$(printf "\e[37m%s:\e[34m%s\e[4m%*s\e[m\n# " \
  "$LOGNAME@$HOSTNAME" "$PWD" \
  "COLUMNS - ${#LOGNAME} - ${#HOSTNAME} - ${#PWD} - 2")'

ksh88( /usr/bin/kshSolaris 10과 유사)은 $COLUMNS명령 대체를 확장하지 않으며 $PS1(매개변수 확장은 수행하지만) 다음을 수행할 수 있습니다.

LOGNAME=$(logname)
HOSTNAME=$(hostname)
get_COLUMNS() {
  COLUMNS=$(stty -a)
  COLUMNS=${COLUMNS#*columns = }
  COLUMNS=${COLUMNS%%;*}
}
get_COLUMNS
trap get_COLUMNS WINCH
ESC=$(printf '\33')
s=
while ((${#s}<300)); do
  pad[${#s}]=$s
  s="$s "
done
PS1="$ESC[37m\$LOGNAME@\$HOSTNAME:$ESC[34m\$PWD$ESC[4m\
"'${pad[COLUMNS - ${#LOGNAME} - ${#HOSTNAME} - ${#PWD} - 2]}'"$ESC[m
# "

(이것은 ksh93 및 bash에서도 작동해야 합니다. 첫 번째 것은 /usr/bin/ksh를 사용하여 Solaris 11(93u 2011-02-08) 및 Debian(93u+ 2012-08-01)에서 성공적으로 테스트되었으며 93t+에서 작동해야 합니다. 2009에서는 -05-01을 사용하고 Solaris 10에서는 /usr/bin/ksh(M-11/16/88i) 및 /usr/dt/bin/dtksh(93d)를 사용하여 성공적으로 테스트되었습니다.

관련 정보