파일로 리디렉션되지 않는 LDAP 오류

파일로 리디렉션되지 않는 LDAP 오류

단일 DNS에 대해 LDAP 서버를 쿼리할 때마다 루프를 실행하여 제대로 실행되는지 확인했습니다. 성공 및 실패 응답을 파일로 출력하고 싶습니다. 전자는 작동하지만 후자는 화면에 덤프되고 그 이유를 이해할 수 없습니다. 이것은 내 코드입니다.

#!/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

또한 루프에서 출력을 파이핑해 보았지만(완료된 후가 아님) 오류가 여전히 화면에 인쇄됩니다. 문제의 오류는 다음과 같습니다.

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

이 오류의 반환 값은 255입니다.

이것은 일반적인 오류처럼 리디렉션되지 않는 일종의 특별한 오류입니까, 아니면 뭔가 빠졌습니까?

답변1

ldapsearch의 메시지는 다음과 같습니다.표준 오류 스트림으로 인쇄, 이전에는 잡히지 않았습니다 | while.

단지 a를 사용하여 리디렉션을 시도했다면 >루프 내에서 작동하지 않는 이유를 설명할 수 있습니다.

ldapsearch의 오류 출력을 캡처하려면 스크립트를 다음과 같이 변경합니다.

#!/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

루프와 두 가지 변경 사항을 더 쉽게 볼 수 있도록 스크립트 형식을 약간 변경했습니다. 두 번째 루프는 echo(stdout으로) 하나의 명령문만 실행하므로 거기에서 stderr를 리디렉션할 필요가 없습니다.

관련 정보