ファイルにリダイレクトされない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

ループと2つの変更をより簡単に表示できるように、スクリプト形式を少し変更しました。 2番目のループはecho(stdoutで)1つのステートメントのみを実行するため、そこからstderrをリダイレクトする必要はありません。

おすすめ記事