파일 간 파이프가 중간 파이프에서 작동하지 않습니다.

파일 간 파이프가 중간 파이프에서 작동하지 않습니다.

이로 인해 문제가 발생합니다.

node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE}  &

이것은 작동합니다:

node "$SUMAN_PROJECT_ROOT/server.js"  &> ${LOG_FILE}  & 

문제는 첫 번째 명령의 출력이 파일로 전송되지 않는다는 것입니다. 두 번째 명령에서는 실제로 파일로 전송됩니다. 첫 번째 명령이 작동하지 않는 이유 - 두 번째 명령과 마찬가지로 출력을 파일로 보낼 것으로 예상했습니다. Bunyan 명령은 grep과 유사해야 하며 node 명령의 출력을 필터링하고 매핑하기만 하면 됩니다.

내 편집자는 제안된 솔루션을 좋아하지 않습니다.

여기에 이미지 설명을 입력하세요.

답변1

node "$SUMAN_PROJECT_ROOT/server.js"  &> ${LOG_FILE}  & 

먼저 작업 순서를 확인해 보겠습니다.

이는 node명령의 표준 출력과 표준 오류를 가져온 다음 리디렉션하는 것을 의미합니다.둘 다로그 파일에. (그리고 변수를 인용해야 합니다. LOG_FILE에 공백이 포함되어 있으면 중단됩니다. 참조공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?)

명령은 백그라운드에 배치되지만 &실제로는 관련이 없습니다.

node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE}  &

말씀하신 명령이 작동하지 않습니다. 이것이 하는 일은 node명령의 표준 출력을 가져와 bunyan명령에 전달한 다음 표준 출력과 표준 오류를 리디렉션하는 것입니다.bunyan당당한로그 파일에.

이것이 작동하지 않는다고 말했기 때문에 관심 있는 명령의 출력이 node표준 오류로 전송된다는 것이 분명한 결론입니다.아니요표준 출력. 표준 오류도 리디렉션되도록 사용하거나 &|사용하세요 .node ... 2>&1 | ...

( &|휴대용이 아닌게 아쉽지만 &>그런 점은 신경쓰지 않으실 것 같아요.)

관련 정보