출력을 반환하는 타사와 함께 여러 다른 스크립트를 실행하는 run.sh가 있습니다. 내 run.sh에는 유익한 에코 정보도 있습니다...
특정 프로세스의 속도도 확인하고 싶기 때문에 각 명령의 날짜와 함께 모든 것을 기록하는 것을 스크립트 상단에 추가하고 싶습니다. tee와 스크립트가 이 작업을 수행할 수 있다는 것을 확인했습니다. 여러 번 시도했지만 사용 중인 컴퓨터에 tee가 설치되어 있지 않고(쉽게 설치할 수 없는 클러스터입니다) 방금 받은 스크립트를 사용하고 있습니다.
Script started, file is log.txt
Script started, file is log.txt
Script started, file is log.txt
Script started, file is log.txt
Script started, file is log.txt
편집하다:
나는 이것을하는 방법을 알아 냈습니다
exec >logfile.txt 2>&1
하지만 여전히 각 행의 시작 부분에 데이터를 추가하는 방법을 모르겠습니다. 이 접근 방식을 사용하면 이제 터미널에서 출력을 볼 수 없습니다.
답변1
나는 항상 스크립트 시작 부분에 "echo_do"라는 작은 함수를 추가하고 아래와 같이 해당 함수를 통해 명령을 실행합니다.
#! /usr/bin/ksh
echo_do () {
echo $(date) "$@"
eval "$@"
}
echo_do pwd
echo_do sleep 3
echo_do "ls -l /tmp | wc"
echo_do sleep 3
echo_do "find /tmp | wc"
예를 들어, 자신만의 "티셔츠"를 만들 수도 있습니다. "티.sh":
#! /usr/bin/ksh
IFS=""
if [ "X"$1 == "X-a" ]
then
shift
else
for OF in $@
do
> $OF
done
fi
while read
do
for OF in $@
do
echo "$REPLY" >> $OF
done
echo "<$REPLY>"
done
원하는 곳에 필요한 시간을 삽입하세요.
답변2
zsh
스크립트 에서는 다음을 수행할 수 있습니다.
{
PS4='[%D{%FT%T.%6.%z}] %N:%i> '
set -o xtrace
# rest of the script goes here.
} >&1 > file.log 2>&1
그러면 stdout 및 stderr(xtrace 출력 포함)에 대한 타임스탬프를 포함한 출력이 추가되고 xtrace
원시 stdout으로 리디렉션되며 file.log
(일부 내부 tee
ing 사용)
다음과 같은 내용이 표시됩니다.
$ zsh ./myscript.zsh
[2022-01-06T17:07:34.977886+0000] ./myscript.zsh:4> echo before
before
[2022-01-06T17:07:34.978244+0000] ./myscript.zsh:5> sleep 1
[2022-01-06T17:07:35.979618+0000] ./myscript.zsh:6> echo after
after
또한 REPORTTIME
이 변수를 0으로 설정하여 zsh
종료된 각 프로세스(및 대기 중인 프로세스)의 리소스 사용량을 출력할 수도 있습니다. 기본적으로 CPU 시간(사용자 및 시스템)과 경과 시간이 포함되지만 변수를 사용하여 다른 리소스를 표시하도록 구성할 수 있습니다 TIMEFMT
. REPORTTIME=1
CPU 시간을 1초 이상 사용하는 프로세스만 보고됩니다. 당신은 또한 볼 수 있습니다 REPORTMEMORY
.