ファイルに書き込んでバックグラウンドジョブ出力を取得する

ファイルに書き込んでバックグラウンドジョブ出力を取得する

私が実行している実行中のバックグラウンドコマンドの出力を取得しようとしています。

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 はすべての改行でバッファフラッシュを表します。

ヒントありがとうございます!

おすすめ記事