Roteiro Automatizado (script automatizado) es.pabra

Iniciado por rafael, Abril 28, 2017, 11:15:29 AM

tópico anterior - próximo tópico

rafael

Oi,

Estou criando um roteiro para executar comandos automatizados.
Mas estou com problema na saída de erros.
Minha dificuldade é capturar mensagens de erro, tentei es.leia("*t")
A única forma que encontrei foi redirecionando a saída para um arquivo 2>/tmp/erros
mas acho que tem uma forma de capturar diretamente na variável


// ┌────────────────────────────────────────────────────────────────────┐ \\
// │████████████████████████████████████████████████████████████████████│ \\
// ├────────────────────────────────────────────────────────────────────┤ \\
// │  CRIADO POR RAFAEL ALVES LEMOS - NA LINGUAGEM PRISMA     │ \\
// │      Não há qualquer licença ou garantia de funcionamento          │ \\
// ├────────────────────────────────────────────────────────────────────┤ \\
// │████████████████████████████████████████████████████████████████████│ \\
// └────────────────────────────────────────────────────────────────────┘ \\


imprima("Digite o endereço IP desta forma 1.1.1. \n será varrida uma rede /24 ou 254 endereços:")
endereco = leia()

comando_inicial = 'sshpass -p SENHA ssh -o UserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -oKexAlgorithms=+diffie-hellman-group1-sha1 -o ConnectTimeout=1 USUÁRIO@'
comando_final = ' \'cat /etc/version\' 2>/tmp/erros '
local err = '/tmp/erros'
funcao principal();
para i=1,254 inicio

f = es.pabra(comando_inicial..endereco..i..comando_final );
se f entao

     local tela = f:leia('*t');
     f:feche();
     se tela entao
        es.entrada(err);
x = es.leia("*t"); //colocando o "*t" o arquivo é lido inteiro
es.feche();
imprima(x)

        esgotado = tela:procure("Connection timed out")
       
             imprima (x)
  fim
fim
fim //para
fim //fim funcao

adalberto

Adicionando 2>&1 na linha de comando, a saída de erro é forçada como retorno para leia'*t';

Veja um exemplo abaixo:


cmd = "prisma -e 'imprima(8+a)' 2>&1 ";
f = es.pabra(cmd);

se f entao
   s = f:leia'*t';
   f:feche();
fim

imprima( s );

inclua 'igbr'

ig.msg(nulo,'',s);
sis.saia(0);


Obs. Essa dica é dependente da plataforma, testado em linux Mint.

Até logo...

rafael

Boa noite Adalberto,

Consegui capturar a tela trocando os números:
2>&1 para 1>&2
Mas não consigo fazer meu programa automaticamente passar uma entrada para o terminal (stdin)

Ele executa o comando passwd no terminal mas fica esperando digitar a senha

Tem uma luz?

adalberto

Estranho ter que inverter o  2>&1 para 1>&2
aqui na minha distro o primeiro funciona.

Veja se os comandos abaixo atendem sua necessidade:


//mudando senha com passwd:

inclua'igbr';

cmd = 'prisma -e "poe\'%s\'; poe\'%s\\n%s\'" | sudo -S passwd %s';

senha_atual = 'senha_atual';
nova_senha = 'nova_senha';
usuario = 'seu_usuario';

cmd = string.formate(cmd, senha_atual, nova_senha, nova_senha, usuario);

a = es.pabra( cmd .. ' 2>&1' );
ig.msg(nulo,'',a:leia'*t');
a:feche();

sis.saia(0);



Falou, até mais...