제대로 작동하지 않는 파일로 리디렉션

제대로 작동하지 않는 파일로 리디렉션

여기에 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)"

관련 정보