Bash
重定向到文件無法正常工作
我這裡有一個 bash 腳本:
#!/bin/bash TARGET_FILE=ping_result.txt # declare the target ip addresses declare -a ips=("XXX.XXX.XXX.XXX" "YYY.YYY.YYY.YYY") function print_and_log() { echo "$1" echo "$1" >> $TARGET_FILE 2>&1 } # loop through all ip addresses for i in "${ips[@]}" do print_and_log "----- Begin Pinging for $i --- " print_and_log "command: ping -c10 $i" print_and_log $(ping -c10 $i) print_and_log "----- Pinging for $i end ----- " done
我的目標是將相同的輸出列印到文件和控制台中。但是當我斷開我的作業系統與網路的連接時,在控制台中,我看到(例如第一個 IP 地址):
----- Begin Pinging for XXX.XXX.XXX.XXX --- command: ping -c10 XXX.XXX.XXX.XXX connect: Network is not reachable ----- Pinging for XXX.XXX.XXX.XXX end -----
但是在文件中,我沒有看到任何消息,表明網路無法訪問。為什麼?如何更改我的 bash 腳本,我也可以在我的日誌文件中看到此消息。
“網路無法訪問”消息列印到
stderr
, notstdout
,因此您的替換 ($(ping ...)
) 不會擷取它。您需要在執行時重定向stderr
到,而不是在登錄時:stdout``ping
print_and_log "$(ping -c10 "$i" 2>&1)"