파일 및 콘솔로 출력하기 위한 쉘 스크립트 준비

파일 및 콘솔로 출력하기 위한 쉘 스크립트 준비

tee출력을 파일에 복사하고 콘솔에 출력하는 데 사용할 수 있다는 것을 알고 있습니다 .

tee그러나 스크립트의 모든 명령을 사용하거나 파이프를 사용하여 스크립트를 실행하지 않고는 (고정 템플릿과 같은) 쉘 스크립트를 준비하는 방법을 찾을 수 없는 것 같습니다 tee.

tee따라서 스크립트가 자동으로 호출하도록 하는 대신 파이프라인을 사용하여 매번 스크립트를 호출해야 합니다 .

수정된 shebang을 사용하여 파이프를 사용해 보았지만 성공하지 못했습니다. 이를 달성할 수 있는 방법을 찾을 수 없는 것 같습니다.

따라서 다음과 같이 스크립트를 호출하지 마십시오.

./myscript.sh |& tee scriptout.txt

다음과 같이 호출하여 동일한 효과를 얻고 싶습니다.

./myscript

물론 스크립트는 스크립트 내의 변수에 설정된 파일 이름을 알아야 합니다.

어떻게 해야 하나요?

답변1

스크립트 내용을 함수로 래핑하고 함수 출력을 다음으로 파이프할 수 있습니다 tee.

#!/bin/bash

{
echo "example script"
} | tee -a /logfile.txt

답변2

를 사용하여 스크립트 시작 부분에 출력을 설정하는 것과 같은 작업을 수행할 수 있습니다 exec. (아직 이에 대한 강력한 테스트를 수행하지 않았습니다.)

#!/bin/bash

# Split script output to stdout and to the logfile
exec 1> >(tee -a "/tmp/${0##*/}.log")

# Write a message
echo hello, world

# Empirical pause before exiting to wait for all output to get through the tee
sleep 1
exit 0

예를 들어, 스크립트가 호출되어 demo다음을 사용하여 실행 가능하게 만들어졌다고 가정합니다 chmod a+x demo.

ls -l /tmp/demo.log
ls: cannot access '/tmp/demo.log': No such file or directory

./demo
hello, world

cat /tmp/demo.log
hello, world

관련 정보