줄 바꿈을 사용하여 스크립트의 여러 줄 출력을 파일로 인쇄하는 방법

줄 바꿈을 사용하여 스크립트의 여러 줄 출력을 파일로 인쇄하는 방법

다음 스크립트가 있습니다.

/usr/bin/daily-execution

#!/bin/bash
log_folder=/var/log/hans-keeper
now=$(date +"%Y-%m-%d-%H:%M:%S")
if [ ! -d "/var/log/hans-keeper" ]
then
        mkdir /var/log/hans-keeper
fi
target_file="$log_folder/$now"
exec_log(){
        echo "executing $1 and log into: $target_file"
        result=$(sudo $1)
        echo "$1" >> $target_file
        echo "-------------------------------------------------" >> $target_file
        printf "%s\n" $result >> $target_file
        echo "-------------------------------------------------" >> $target_file
        echo "" >> $target_file
}

exec_log /usr/bin/hans-keeper
exec_log /usr/bin/move-sync-staging

/usr/bin/hans-keeper아래와 같이 여러 줄의 에코 가 있습니다 .

echo "line 1"
echo "line 2"
echo "line 3"

게다가 move-sync-staging.

/usr/bin/hans-keeper쉘에서 직접 실행하면 다음과 같이 인쇄되는 것을 확인했습니다 .

line 1
line 2
line 3

그러나 결과에서 로그 파일을 열면 /usr/bin/daily-execution다음과 같이 인쇄됩니다.

line 1line 2line 3

/usr/bin/hans-keeper쉘에서 직접 스크립트를 실행 하면 출력에 개행 문자가 포함되지 않는 것 같습니다 .

이 문제를 해결하고 스크립트를 개선하는 데 도움을 주시면 정말 감사하겠습니다.

답변1

       echo "executing $1 and log into: $target_file"
       result=$(sudo $1)
       echo "$1" >> $target_file
       echo "-------------------------------------------------" >> $target_file
       printf "%s\n" $result >> $target_file
       echo "-------------------------------------------------" >> $target_file
       echo "" >> $target_file

인용되지 않은 확장이 $result이유입니다. { cmd1; cmd2 } >> file별도의 리디렉션 대신 사용하세요 .

exec_log() {
    echo "executing $1 and log into: $target_file"
    {
        echo "$1"
        echo "-------------------------------------------------"
        sudo "$1"
        echo "-------------------------------------------------"
        echo "" 
    }>> "$target_file"
}

관련 정보