Pipe

Ldap 錯誤不會重定向到文件

  • June 28, 2016

我每次都執行一個循環查詢 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。

這是某種特殊的錯誤,不會像通常的錯誤那樣被重定向,還是我錯過了什麼?

來自 ldapsearch 的消息正在列印到 stderr 流,在| while.

如果您一直試圖只用 重定向它>,那將解釋為什麼它不能在循環內工作。

如果要擷取 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語句(到標準輸出),因此不需要在那裡重定向標準錯誤。

引用自:https://unix.stackexchange.com/questions/292564