bash 처리내용을 로그파일로 저장하기

사용자들이 직접 작성하는 실전팁!

Moderator: Dry8r3aD

Post Reply
별님
Posts: 577
Joined: 2012/01/11 Wed 9:38 pm
Contact:

bash 처리내용을 로그파일로 저장하기

Post by 별님 » 2013/09/24 Tue 4:41 am

[code:1yce8drl]#!/bin/bash
#1 : savepath
#+지정된 위치가 폴더면 실행된 스크립트명으로 내용을 추가합니다.
#+지정된 위치가 존재하지 않으면, 해당 위치에 내용을 추가합니다.
#+경로가 지정되지 않으면, 기본설정된 위치에 로그를 추가합니다.
#넘겨진 인수는 기본적으로 한번더 해석되니, bash쉘에서 사용되는 특수문자를 주의해서 사용하세요.
mkdir ~/LOG
if [ "$1" ]; then
eval savepath="$1"
[ -d "$savepath" ] && savepath="$savepath/`basename "$1"`.log"
else
savepath="$HOME/LOG/`basename "$1"`.log"
fi
shift
{
echo -e '\n=========================================================='
date
bash "$@"
} 2>&1 | tee -a "$savepath"[/code:1yce8drl]
bash 스크립트 내의 모든 처리 내용을 로그파일로 저장해줍니다.

사용법:
[code:1yce8drl]#!/home/USER/.script/bashscriptrecode $HOME/LOG/$(date +%F_%H-%M-%S).log
echo TEST
date
exit
echo TEST[/code:1yce8drl]
인터프리터에 해당 스크립트 경로를 적어준뒤, 저장될 스크립트의 경로를 뒤에 적어주면 됩니다. bash쉘에서 인수에 포함된 명령을 치환해주기 떄문에, bash에서 쓰이는 특수문자를 그대로 입력하려면 한번 더 치환해줘야 합니다.

세벌
Posts: 1023
Joined: 2011/10/13 Thu 7:59 am
Location: 우리나라
Contact:

Re: bash 처리내용을 로그파일로 저장하기

Post by 세벌 » 2013/09/24 Tue 5:05 pm

떄문에.... 두벌식을 쓰시기 때문에...

별님
Posts: 577
Joined: 2012/01/11 Wed 9:38 pm
Contact:

Re: bash 처리내용을 로그파일로 저장하기

Post by 별님 » 2013/09/25 Wed 1:33 am

[quote="세벌":3q1lgrp8]떄문에.... 두벌식을 쓰시기 때문에...[/quote:3q1lgrp8]
두벌식을 애용합시다?

별님
Posts: 577
Joined: 2012/01/11 Wed 9:38 pm
Contact:

Re: bash 처리내용을 로그파일로 저장하기

Post by 별님 » 2013/09/26 Thu 3:48 am

[code:2uiok6er]#!/bin/bash
#1 : savepath 지정된 위치(저장될 경로)
#주의: 인자는 넘겨지기 전 콰우팅되어 있어야 합니다. ex)#!이스크립트명 "$HOME/LOG"
#+지정된 위치가 폴더면 실행된 스크립트명으로 내용을 추가합니다.
#+지정된 위치가 존재하지 않으면, 해당 위치에 내용을 추가합니다.
#+경로가 지정되지 않으면, 기본설정된 위치에 로그를 추가합니다.
#넘겨진 인수는 기본적으로 한번더 해석되니, bash쉘에서 사용되는 특수문자를 주의해서 사용하세요.
mkdir $HOME/LOG 2>/dev/null
if echo "$1" | grep -q -e '^\./' -e '^/'; then
savepath=$HOME/Log/`basename "$1"`.log
else
savepath=$(eval "$1")
[ -d "$savepath" ] && savepath=$savepath/`basename "$2"`.log
shift
fi

{
[ -e "$savepath" ] && echo -e '\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='
date
bash "$@"
} 2>&1 | tee -a "$savepath"[/code:2uiok6er]

일부 코드를 수정했습니다.

별님
Posts: 577
Joined: 2012/01/11 Wed 9:38 pm
Contact:

Re: bash 처리내용을 로그파일로 저장하기

Post by 별님 » 2013/10/05 Sat 10:17 am

[code:15wz3hox]#!/bin/bash
#1 : savepath 지정된 위치(저장될 경로)
#주의: 인자는 넘겨지기 전 콰우팅되어 있어야 합니다. ex)#!이스크립트명 "$HOME/LOG"
#+지정된 위치가 폴더면 실행된 스크립트명으로 내용을 추가합니다.
#+지정된 위치가 존재하지 않으면, 해당 위치에 내용을 추가합니다.
#+경로가 지정되지 않으면, 기본설정된 위치에 로그를 추가합니다.
#넘겨진 인수는 기본적으로 한번더 해석되니, bash쉘에서 사용되는 특수문자를 주의해서 사용하세요.
savepath=$HOME/Log
mkdir "$savepath" &>/dev/null

if grep -qE '^\.?/' <<<"$1"; then
savepath+=/$(ex_name "$1").log
else
OIFS=$IFS; IFS=\
eval "op=($1)"
case "${op[0]}" in
#저장될 경로를 지정합니다.
--savepath )
unset op[0]
savepath=$(eval echo \""${op[*]}"\")
#대상이 디렉토리일경우 스크립트 명으로 해당 위치에 저장합니다.
test -d "$savepath" && savepath+=/$(basename "$2" .sh).log;;
#이름만 바꿔 기본경로에 저장합니다. 뒤에 자동으로 .log확장자가 붙습니다.
--changename )
unset op[0]
savepath+=/$(eval echo \""${op[*]}"\").log;;
#아무런 옵션이 없을시 실행 스크립트 명을 저장명으로 기본경로에 저장합니다.
-- )
unset op[0]
savepath+=/$(basename "$2" .sh).log;;
* )
savepath+=/$(eval echo \""${op[*]}"\").log;;
esac
shift
IFS=$OIFS
fi

{
[ -e "$savepath" ] && echo
echo '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-='
date
bash "$@"
} 2>&1 | tee -a "$savepath"[/code:15wz3hox]
약간의 동작 오류가 있어 수정해서 올립니다.

Post Reply