私が実行している実行中のバックグラウンドコマンドの出力を取得しようとしています。
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 はすべての改行でバッファフラッシュを表します。
ヒントありがとうございます!