파일에 기록하여 백그라운드 작업 출력 가져오기

파일에 기록하여 백그라운드 작업 출력 가져오기

내가 실행하는 실행 중인 백그라운드 명령의 출력을 얻으려고 합니다.

sudo wminput -r -w -c "$controls_config" > "$temp_output" &
exec 3< "$temp_output"

while true; do
    sleep 1
    read <&3 output
    if [[ "$output" = 'Ready' ]]; then
        echo "Controller $wiimote_counter Connected"
        break
    fi
done

그러나 스크립트가 실행될 때 파일에는 아무 것도 기록되지 않습니다. SIGINT를 보낸 후에만 파일에 아무 것도 쓰지 않습니다(파일만 사용해도 시도했지만 운이 없었습니다).

내가 사용하고 싶은 방식으로 백그라운드 작업의 출력을 얻는 또 다른 방법이 있나요? 즉, 특정 출력에 도달할 때까지 계속해서 작동합니다.

답변1

@choroba의 의견 덕분에 출력이 버퍼링된다는 사실을 알게 되었습니다.

더 찾아보니이 게시물기본적으로 stdout을 버퍼링하도록 선언합니다.
또한 wminput에 대한 매뉴얼 페이지를 살펴봐도 빠른 해결책이 없었기
때문에 작업의 stdout 버퍼에서 파일로 강제로 플러시하는 방법을 찾았고 stdbuf 명령을 찾았습니다.표준 버퍼 문서

나는 as를 사용합니다.
sudo stdbuf -oL wminput -r -w -c "$controls_config" > "$temp_output" &
여기서 -o는 stdout을 나타내고
-L은 모든 개행에서 버퍼 플러시를 나타냅니다.

힌트를 주셔서 감사합니다!

관련 정보