Bash 스크립트 - 애플리케이션을 실행하고 실시간 출력을 표시합니다.

Bash 스크립트 - 애플리케이션을 실행하고 실시간 출력을 표시합니다.

일부 환경 매개변수를 설정한 다음 C++ 애플리케이션을 실행하는 bash 스크립트가 있습니다.

C++ 애플리케이션은 실행되는 동안 현재 상태를 보여주는 정보를 출력합니다.

현재는 실행이 완료된 후에만 결과가 표시됩니다. (약 1분) bash 스크립트가 애플리케이션의 실시간 출력을 표시하도록 하는 방법이 있습니까?

이것이 내가 지금까지 가지고 있는 것입니다:

OUTPUT="$(sudo ./test_app -release)"    
echo $OUTPUT

신청이 완료되면 다음 정보를 받게 됩니다.

release acknowledgereleasingstage1stage2released

명령줄에서 직접 애플리케이션을 실행하면 애플리케이션이 완료될 때 모든 프로세스가 병합되는 대신 완료될 때 각 프로세스가 새 줄로 표시됩니다.

release acknowledge
releasing
stage1
stage2
released

이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 사용자가 여러 명령을 실행하지 않아도 되도록 bash 스크립트에서 애플리케이션을 호출하고 싶습니다.

감사해요.

답변1

출력을 표시하고 싶지만 저장할 필요가 없으면 다음 명령을 실행하면 됩니다.

sudo ./test_app -release

출력을 저장하고 표시하려면 다음을 호출하십시오.tee출력을 복사합니다.

OUTPUT=$(sudo ./test_app -release | tee /dev/stderr)

출력을 리디렉션하면 응용 프로그램이완충기한 줄씩 출력하지 않고 덩어리 단위로 출력합니다. Line-by-line은 출력이 터미널일 때만 기본값이고, 출력이 파이프나 일반 파일일 때는 기본값이 아닙니다. 귀하의 신청서에 해당되는 경우,전화 unbuffer하거나stdbuff. 왜냐하면그들이 어떻게 작동하는지, stdbufsudo를 통해 호출해야 하며 buffer이전처럼 실행할 수 있습니다.

OUTPUT=$(sudo stdbuf ./test_app -release | tee /dev/stderr)
OUTPUT=$(unbuffer sudo ./test_app -release | tee /dev/stderr)

답변2

특정 이유로 출력을 저장할 필요가 없다고 가정하면 간단히 바꿀 수 있습니다.

OUTPUT="$(sudo ./test_app -release)"    
echo $OUTPUT

그리고

sudo ./test_app -release

내장 명령과 비 내장 명령(기본 수준) 사이의 쉘 스크립트에는 특별한 차이가 없습니다. 그들은 모두 단지 물건을 실행하고 출력합니다.

관련 정보