백그라운드 프로세스의 sed에서 콘솔 출력 리디렉션이 반환되지 않습니다.

백그라운드 프로세스의 sed에서 콘솔 출력 리디렉션이 반환되지 않습니다.

나는 sed를 사용하여 명령에 의해 제공된 각 줄의 시작 부분에 날짜를 추가합니다(vlc를 사용하면 절대 멈추지 않습니다...). 다른 stackexchange 게시물에서 이 방법을 찾았는데 예상대로 작동합니다.

command | sed "s/^/$(date +%Z-%Y-%m-%d-%T) /" &>> $LOGFILE &

이제 스크립트 파일에서 백그라운드 프로세스로 사용하고 싶습니다. 내 문제는 스크립트가 이 줄에서 완료되지 않고 중지되지 않는다는 것입니다.

잘 이해하면 sed는 명령이 실행되는 동안 절대 완료되지 않는데 어차피 백그라운드에서 실행되고 다음 단계로 넘어가야겠죠?

sed 부분을 제거하면 스크립트가 예상대로 종료됩니다.

Centos 6.4, 버전 4.2.53(1)-릴리스(x86_64-redhat-linux-gnu)에서 GNU bash를 실행하고 있습니다.

답변1

명령을 처리하려면 파이프에 대한 개행 문자를 인쇄해야 합니다.

test1(){ echo "testing-one"; sleep 100; }
test2(){ echo -n "testing-two"; sleep 100; }

test1| sed "s/^/$(date -u +%Z-%Y-%m-%d-%T)/"

테스트 중인 함수(명령 에이전트 역할을 함)가 이면 test1개행 문자를 내보냅니다 . 사용하면 명령 자체가 완료되지 않은 경우에도(sleep 100) 한 줄이 즉시 방출됩니다.

test2 기능(세 번째 줄 편집)을 사용하는 경우 전체 명령줄이 완료될 때까지 이 줄이 내보내지지 않습니다.

관련 정보