Detectar tipo de terminal com tput

4

Eu gostaria de configurar o tipo de terminal detectando-o. Por exemplo, quando estou conectando a uma caixa do Solaris com o PuTTY, a variável $TERM está definida como vt100 . Eu gostaria de negociar isso assim, quando o emulador de terminal for PuTTY, para definir $TERM para xterm .

Eu notei que em ^ E o PuTTY responde com PuTTY . Mas eu acho que o melhor método é usar tput para tentar detectar o tipo de emulador de terminal. O problema é que não consegui encontrar nenhuma referência no manual terminfo ou tput como fazer isso.

Caso contrário, tentarei algo com base em:

unset remote_term;echo $'\cE';read -rt 1 -n5 remote_term ;echo remote_term=$remote_term
    
por Mircea Vutcovici 16.01.2012 / 21:07

2 respostas

1

Talvez isso seja muito simples, mas se você está preocupado com seu ambiente de usuário (e assumindo que todos têm sua própria conta, e não há compartilhamento de contas maluco acontecendo onde um grupo de pessoas use o mesmo combo username + password) ...

Por que não apenas adicionar algo ao arquivo de ambiente do seu próprio shell?

Korn (/ bin / ksh) Shell (~ / .kshrc)

##############################################################################
## TERM control - if we're on the console, fix it up.
TTY=' /usr/bin/tty ' # Really should call /bin/tty in HP-UX in case of S.U.M.
TTY_DEV=${TTY##*/dev/}
if [[ ${TTY_DEV} = "console" ]]; then
## Most serial-line consoles report "/dev/console" when you use 'tty'
## Since most consoles don't set their columns and rows, resulting in weird
##   stuff when we open things like 'vi', we call 'resize' (if it's present)
   if [[ -x /usr/openwin/bin/resize   ]]; then
      printf "Console...\c"
      export PATH=${PATH}:/usr/openwin/bin && \
      /usr/openwin/bin/resize >/dev/null 2>&1 && \
      printf "fixed. \n" || \
      printf "something's broke.\n"
   elif [[ -x /usr/bin/X11/resize     ]]; then
      printf "Console..."
      export PATH=${PATH}:/usr/bin/X11 && \
      /usr/bin/X11/resize >/dev/null 2>&1 && \
      printf "fixed. \n" || \
      printf "something's broke.\n"
   else
      printf "No resize binary found, check console settings.\n"
   fi
else
   TERM=xterm
fi

Bourne Novamente (/ bin / bash) Shell (~ / .bashrc ~ / .bash_profile)

(O código acima deve funcionar sem problemas)

Shell Bourne (/ bin / sh) normal (~ / .profile)

(O código acima, mas / bin / sh não faz divisão de variáveis, então TTY_DEV terá que ser mais criativo.)

    
por 03.10.2013 / 16:58
0

Qualquer motivo pelo qual você não pode simplesmente definir as opções de conexão no PuTTY para negociar o tipo de terminal desejado?

Na configuração do PuTTY, clique em Conexão - > Dados e, em seguida, defina "String do tipo terminal" na seção Detalhes do terminal para qualquer tipo de terminal desejado. O meu está definido para ansi, mas você pode facilmente mudar isso para o xterm.

Isso é mais elegante do que interceptar o answerback Ctrl-E, pois respeita a intenção do usuário para o tipo de terminal.

    
por 27.01.2012 / 00:03