![중첩된 bash 명령(괄호 안)의 내부 출력을 한 파일에 저장하고 외부 출력을 다른 파일에 어떻게 저장합니까?](https://linux55.com/image/204979/%EC%A4%91%EC%B2%A9%EB%90%9C%20bash%20%EB%AA%85%EB%A0%B9(%EA%B4%84%ED%98%B8%20%EC%95%88)%EC%9D%98%20%EB%82%B4%EB%B6%80%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%ED%95%9C%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%A0%80%EC%9E%A5%ED%95%98%EA%B3%A0%20%EC%99%B8%EB%B6%80%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%A0%80%EC%9E%A5%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
이것은 내 명령입니다:
(time ( \
time sleep 1; \
time sleep 2 \
) 2>&1 | tee inner.txt ) 2>&1 | tee outer.txt
cat inner.txt
보여주다:
real 0m1.003s
user 0m0.001s
sys 0m0.002s
real 0m2.003s
user 0m0.001s
sys 0m0.002s
다음 cat outer.txt
을 표시합니다.
real 0m1.003s
user 0m0.001s
sys 0m0.002s
real 0m2.003s
user 0m0.001s
sys 0m0.002s
real 0m3.068s
user 0m0.005s
sys 0m0.008s
이것을 어떻게 넣을 수 있나요 outer.txt
? :
real 0m3.068s
user 0m0.005s
sys 0m0.008s
inner.txt
더 좋은 점은 다음을 포함하는 , outer.txt
, , 를 both.txt
어떻게 얻을 수 있는지입니다 both.txt
.
real 0m1.003s
user 0m0.001s
sys 0m0.002s
real 0m2.003s
user 0m0.001s
sys 0m0.002s
real 0m3.068s
user 0m0.005s
sys 0m0.008s
위에서 사용한 cmd 는 time
bash 내장 함수입니다 time
.아니요이 /usr/bin/time
명령은 제가 여기 질문을 통해 배운 것입니다.time
선택적 매개변수를 명령 에 전달하는 방법
저는 리눅스 우분투 18.04를 사용하고 있습니다.
이 질문은 해당 답변을 개선하기 위한 시도로 여기에 있는 내 답변에 대한 후속 조치입니다.bash에서 여러 줄, 여러 하위 명령 명령의 시간을 측정하고 선택적으로 모든 출력을 파일에 저장하는 방법
답변1
한편으로는 내부가 tee
외부에 전원을 공급하고 있다고 생각합니다. 즉, tee
표준 출력으로 인쇄하면 외부 수준의 다른 출력과 함께 외부 파이프로 리디렉션됩니다. 또한 내 Bash에서는 작동하려면 내부 괄호를 중괄호로 변경해야 했습니다(이유는 모르겠습니다).
이것은 파일로만 출력되는 것 같습니다.
(time {
time sleep 1;
time sleep 2;
} > inner.txt 2>&1
) > outer.txt 2>&1
출력을 파일과 터미널/스크립트의 표준 출력 모두로 출력하려면 외부 tee
출력을 "둘러싸도록" 내부 출력을 정렬해야 합니다. 예를 들어, 스크립트의 표준 출력을 다른 무료 파일 설명자에 저장하고 다음 위치에 인쇄하세요.
exec 3>&1;
(time {
time sleep 1;
time sleep 2;
} 2>&1 | tee inner.txt >&3
) 2>&1 | tee outer.txt >&3
( >&3
외부적으로는 필요하지 않으며 대칭을 위해 수행했습니다. tee ... >/dev/tty
(not 필수 exec
)를 사용하여 터미널에 직접 인쇄할 수도 있지만 전체 스크립트 출력을 리디렉션하거나 파이핑하면 작동하지 않습니다.)
위와 같이 하면 myscript |tee both.txt
3개의 출력 파일을 얻을 수 있습니다.