Pipe
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。
這是某種特殊的錯誤,不會像通常的錯誤那樣被重定向,還是我錯過了什麼?
來自 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
語句(到標準輸出),因此不需要在那裡重定向標準錯誤。