ファイルポーリングの代替?

ファイルポーリングの代替?

以下のコードは非同期なので、$tmp_inputコードを実行し続けるにはポーリングする必要があります。wezterm cli send-textこれにより、すべてを$tmp_input準備できます。

tmp_input=$(mktemp ./tmp_input.XXXXXX)

echo "read input; echo \$input > $tmp_input" | wezterm cli send-text --pane-id $bottom_pane_id --no-paste

while [ ! -s "$tmp_input" ]; do
    sleep 1
done

input_value=$(cat "$tmp_input")
rm "$tmp_input"

echo "Input was: $input_value" | wezterm cli send-text --pane-id $bottom_pane_id --no-paste

コードはうまくいきますが、同じ結果を得る別の方法があるかどうかを知りたいです。

ベストアンサー1

代わりに、名前付きパイプを作成してmkfifo読み取ることができます。パイプに何かが書き込まれるまで読み取りがブロックされるため、手動ポーリングは必要ありません。それは次のとおりです。

tmp_input=$(mktemp -d ./tmp_input.XXXXXX)
mkfifo "$tmp_input/fifo"

echo "read input; echo \$input > $tmp_input/fifo" | wezterm cli send-text --pane-id $bottom_pane_id --no-paste

input_value=$(cat "$tmp_input/fifo")
rm "$tmp_input/fifo"
rmdir "$tmp_input"

echo "Input was: $input_value" | wezterm cli send-text --pane-id $bottom_pane_id --no-paste

mktemp -dはから名前を取得し、それを使用mktempするよりも安全な選択肢を選択しましたmkfifo

おすすめ記事