Ldap 错误不重定向到文件

Ldap 错误不重定向到文件

我每次都运行一个循环来查询 ldap 服务器的单个 dn,只是为了看看它是否运行正常。我想将成功和不成功的响应输出到一个文件,虽然前者有效,但后者只是被转储到屏幕上,我不明白为什么。这是我的代码:

#!/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 的消息正在打印到 stderr 流,这不是之前被抓到的| 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。

相关内容