stdout이 파일로 리디렉션되면 소비된 출력을 stdout에 복사합니다.

stdout이 파일로 리디렉션되면 소비된 출력을 stdout에 복사합니다.

grep과 같이 출력이 처리되는 명령이 주어지면 디버깅 목적으로 실제 출력이 로그 파일에 포함되기를 원합니다.

예를 들어, 다음과 같은 경우

useful=$(curl -s http://example.com/some/data | grep 'useful line')
echo "useful=$useful"

보고 싶어요

This page has a number of lines in it, but'
useful lines are the only ones I care about
except when something goes wrong and then
I'd really like to see what the heck was in
the output that grep consumed.
useful=useful lines are the only ones I care about

이것할 수 있는티셔츠는 이렇게 완성하세요

useful=$(curl -s http://example.com/some/data | tee /proc/$$/fd/1 | grep 'useful line')
echo "useful=$useful"

하지만stdout이 파일로 리디렉션되면 tee로그 파일의 나머지 부분이 손상됩니다. tee -a거의 같은 방식으로 실패합니다.

답변1

teestdout제어 단말 장치 로의 흐름 /dev/tty.

(
exec 1> >(tee -a stdout.log)
: > stdout.log
#var="$(echo -e "one\ntwo" | tee /dev/tty | grep one)"
var="$(echo -e "one\ntwo" | tee -a /dev/tty stdout.log | grep one)"
echo "var=$var"
)

cat stdout.log
# one
# two
# var=one

답변2

$var를 원하는지, 아니면 $var가 목적을 위한 수단일 뿐인지는 확실하지 않습니다. $var를 얻으려면 다음을 추가하세요.var="$(cat log)"

sed -nre 'p;/one/w log' <(echo -e "one\ntwo")
  • --------(표준 출력)
    하나 둘
  • --------(로그)
    하나

아니면 다음과 같은 뜻인가요?

sed -nre 'p;/one/w log' -e 's/one/logged: &/p' <(echo -e "one\ntwo")
  • --------(stdout) 기록
    1
    :
    하나 둘
  • --------(로그)
    하나

참고: sed의 명령은 스크립트가 실행될 때마다 w덮어쓰여집니다 . log물론 logsed가 실행된 후에 기본 로그에 추가할 수 있습니다. 바라보다:sed 명령 요약

답변3

함수를 사용하면 안 되는 이유:

#!/bin/bash
logAndEcho () {
    echo -e "$@" >> LOGFILE.txt
    echo -e "$@"
}
var=$(logAndEcho "one\ntwo\nThis is a test"|grep one)
echo "var=$var"

그러면 전체 결과가 로그 파일로 전송된 다음 데이터가 표준 입력으로 에코되어 필요한 경우 이를 캡처할 수 있습니다.

답변4

sed는 이를 위해 설계되었습니다. 스트림 편집기입니다. 이는 귀하의 프로세스에서 티와 그렙을 대체할 수 있으며, 원할 경우 티와 결합하여 포크에 더 많은 타인을 추가할 수 있습니다. 어쨌든 직접 살펴보세요.

% sed '/useful/w ./useful.log' <<HDOC >>./notsomuch.log
> maybe useful
> definitely not
> ho-hum
> now this is useful
> HDOC
% cat ./useful.log
OUT> maybe useful
OUT> now this is useful
% cat ./notsomuch.log
OUT> maybe useful
OUT> definitely not
OUT> ho-hum
OUT> now this is useful

관련 정보