以下のコードは非同期なので、$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
。