Personalização rápida: como detectar quando não há tty

5

Eu tenho um prompt personalizado com cores (usando tput) e toda vez que eu inicio uma sessão não interativa no servidor, recebo um monte de erros.
Por exemplo, se eu iniciar uma sessão não interativa como esta:

ssh root@hostname6 "echo 'hello' ; echo $TERM"

A saída que recebo é:

hello
xterm
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
stdin: is not a tty

Portanto, a variável $ TERM tem um valor mesmo quando a sessão não é interativa.

Quais condições devo detectar para que, quando eu iniciar um shell não interativo, a parte de personalização do prompt seja omitida ??

    
por GetFree 23.12.2009 / 19:31

4 respostas

1

Os comandos tput são avaliados no momento em que a atribuição ao PS1 é feita. Como os arquivos de inicialização são processados quando uma sessão ssh é iniciada, a atribuição é feita mesmo que sua sessão não seja interativa. Você pode testar isso e fazer sua tarefa apenas quando estiver iniciando uma sessão interativa.

if [[ $- =~ i ]]
then
    # set PS1 using tput
else
    # set a plain PS1 (or use hard-coded escape sequences)
fi
    
por 23.12.2009 / 21:51
5

Existe um teste integrado para o TTY. Eu esqueci quando foi adicionado, 3.0? Eu acredito que é relativamente novo. Eu uso em scripts onde eu preciso de um comportamento diferente quando é executado a partir do cron ou um usuário o executa diretamente.

if [ -t 0 ]; then
   echo "I'm a TTY"
fi
    
por 03.01.2010 / 02:05
3

Coloque o seguinte no início de / etc / bashrc

[ -z "$PS1" ] && return
    
por 23.12.2009 / 20:52
1

Aqui está uma descrição de todos os três métodos para fazer isso: link

    
por 03.01.2010 / 06:15