正しく機能しないファイルにリダイレクト

正しく機能しないファイルにリダイレクト

ここに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

私の目標は、同じ出力をファイルとコンソールに印刷することです。ただし、ネットワークからOSを切断すると、コンソールに次のものが表示されます(たとえば、最初の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スクリプトをどのように変更しますか?

ベストアンサー1

stderr代わりに、「Network Unreachable」メッセージがに印刷されるため、stdout交換()はそれをキャプチャしません$(ping ...)stderrログイン時ではなく実行時にリダイレクトする必要があります。stdoutping

    print_and_log "$(ping -c10 "$i" 2>&1)"

おすすめ記事