Solaris KSH configurando PS1 com linha dinâmica

0

Eu quero configurar meu prompt (PS1) em duas linhas. No final da primeira linha, quero preencher todo o espaço em branco (do fim da linha até a borda do lado direito do terminal) com uma linha (assim:

por rajeev 09.09.2016 / 19:18

1 resposta

1

Para ksh93 (como seu eksh aparentemente e /usr/bin/ksh no 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 (como /usr/bin/ksh no Solaris 10) não tem $COLUMNS e não expande as substituições de comandos em $PS1 (embora faça a expansão de parâmetros), mas você poderia fazer algo como:

LOGNAME=$(logname)
HOSTNAME=$(hostname)
get_COLUMNS() {
  COLUMNS=$(stty -a)
  COLUMNS=${COLUMNS#*columns = }
  COLUMNS=${COLUMNS%%;*}
}
get_COLUMNS
trap get_COLUMNS WINCH
ESC=$(printf '')
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
# "

(esse também deve funcionar com o ksh93 e o bash. Primeiro um testado com sucesso com / usr / bin / ksh no Solaris 11 (93u 2011-02-08) e no Debian (93u + 2012-08-01) e deve funcionar com 93t + 2009-05-01 também. Segundo, testado com sucesso com / usr / bin / ksh (M-11/16 / 88i) e / usr / dt / bin / dtksh (93d) no Solaris 10)

    
por 09.09.2016 / 22:20

Tags