Erro Ldap não redireciona para o arquivo

1

Estou executando um loop consultando o servidor ldap para um único dn toda vez, só para ver se está funcionando bem. Eu quero mostrar tanto as respostas bem-sucedidas quanto as malsucedidas de um arquivo, e enquanto o primeiro funciona, o último é jogado em uma tela e não consigo entender o porquê. Este é o meu código:

#!/bin/bash

for i in $(seq 20000); do
    ldapsearch -x -LLL -D "cn=manager,ou=ft,o=cudb,c=es" -w normal -h 10.22.127.4 -p 389 -b 'dc=IMSI, ou=identities,ou=ft,o=cudb,c=es'
done | while IFS= read -r line; do echo "[---- PL0 ----] $(date) $line"; done >> search_imsi_$(date '+%Y_%m_%d__%H_%M_%S').log 2>&1

Eu também tentei canalizar a saída no loop (não depois de feito) e erro ainda é impresso na tela. O erro em questão é:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

O valor de retorno desse erro é 255.

Isso é algum tipo especial de erro que não é redirecionado como os habituais, ou estou faltando alguma coisa?

    
por Luka 28.06.2016 / 12:26

1 resposta

0

A mensagem do ldapsearch está sendo impresso no fluxo stderr , que não está sendo detectado antes do | while .

Se você estivesse tentando redirecioná-lo com apenas um > , isso explicaria por que ele não estava funcionando dentro do loop.

Se você deseja capturar a saída de erro do ldapsearch, altere seu script para:

#!/bin/bash

for i in $(seq 20000); do
    ldapsearch -x -LLL -D "cn=manager,ou=ft,o=cudb,c=es" \
      -w normal -h 10.22.127.4 -p 389 \
      -b 'dc=IMSI, ou=identities,ou=ft,o=cudb,c=es' 2>&1    ## <-- added "2>&1" here
done | while IFS= read -r line
do 
  echo "[---- PL0 ----] $(date) $line";  
done >> search_imsi_$(date '+%Y_%m_%d__%H_%M_%S').log      ## no need for 2>&1 here

Eu reformatei o script um pouco para facilitar a visualização dos loops e das duas alterações. Como o segundo loop está executando apenas uma instrução echo (para stdout), não há necessidade de redirecionar o stderr para ele.

    
por 28.06.2016 / 13:34