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.

system is solaris 10, shell is exh

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

Я кое-что нашел здесь, но это не работает. line_Across_terminal

0
10.09.2016, 02:20
1 ответ

Для ksh93 (вроде вашего exh , по-видимому, и / usr / bin / ksh в Solaris 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 / ksh в Solaris 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. Второй успешно протестирован с / usr / bin / ksh (M-11/16 / 88i) и / usr / dt / bin / dtksh (93d) в Solaris 10)

1
28.01.2020, 02:47

Теги

Похожие вопросы