o que “export TERM = linux” realmente faz quando dentro de um script

4

Meu script bash é executado com muito ruído quando executado dentro de um servidor via ssh.

+ sudo apt-get install -yqq nodejs
debconf: unable to initialize frontend: Dialog
debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin:

Uma das sugestões que vi postadas lá foi exportar TERM = linux

Existe algum efeito colateral? É uma boa ideia fazer no início do script, assim:

#!/bin/bash
set -e
set -x
TERM=linux
    
por american-ninja-warrior 01.06.2017 / 01:56

3 respostas

4

O comando export TERM=linux define o emulador de terminal como linux . Dependendo do ambiente e da capacidade do console que você está usando, algumas emulações funcionam melhor que outras.

A configuração padrão TERM para o Ubuntu é xterm . Você pode verificar sua configuração TERM executando echo TERM .

Talvez seja necessário verificar com o provedor do aplicativo que você está executando para descobrir o melhor emulador de terminal recomendado para o programa. A maioria dos aplicativos espera que você já tenha o emulador configurado para algo compatível, como xterm ou linux .

set -x
Uma configuração de depuração:
Você se refere a um script barulhento. Você está obtendo uma saída detalhada do seu script por causa das configurações de set -x que são usadas para depuração. Uma vez que você veja o que está acontecendo e tenha o seu script rodando do jeito que você quer, você pode comentar a linha set -x colocando o símbolo # na frente dele.

set -e
Esta configuração está dizendo ao script para sair em um erro de comando. Por exemplo, se seu comando fosse alterar o diretório para um diretório existente ou listar um arquivo não existente, o script terminaria com o erro, em vez de prosseguir para a próxima linha.

Seu problema com o ssh através do servidor no qual você está efetuando login pode resultar em que, por padrão, o servidor tente corresponder ao emulador de terminal das configurações do computador do qual você está efetuando login. Se não tiver uma correspondência, não sabe quais configurações você pode manipular. Para isso, você terá que usar o comando export TERM para especificar ao servidor como se comunicar com você.

    
por L. D. James 01.06.2017 / 02:34
1

Não faz sentido definir TERM se um TTY não estiver alocado. Se você estiver usando o SSH, use ssh -t :

 -t      Force pseudo-tty allocation.  This can be used to execute
         arbitrary screen-based programs on a remote machine, which can be
         very useful, e.g. when implementing menu services.  Multiple -t
         options force tty allocation, even if ssh has no local tty.

Observe estes erros:

debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)
...
debconf: (This frontend requires a controlling tty.)
    
por muru 01.06.2017 / 03:40
1

De acordo com a página GNU gettext manual , o TERM variável "... contém um identificador para as capacidades da janela de texto". Em outras palavras, apenas informa ao sistema que tipo de terminal você está supostamente usando e como o texto na tela deve ser adaptado.

TERM=linux significa que você supostamente usará o console Linux, então a saída será minimalista, pode não ter suporte para alguns idiomas.

Como o muru apontou, você realmente precisa ter um pseudo-tty alocado. A alteração da variável TERM pode ajudar, mas TERM=linux não é o que você deseja. Você não está usando o console Linux real. A opção -t para ssh seria uma abordagem melhor.

    
por Sergiy Kolodyazhnyy 01.06.2017 / 05:01