No código a seguir, tenho que fazer uma pesquisa $tmp_input
para continuar executando o código porque wezterm cli send-text
é assíncrono. Isso garante que $tmp_input
esteja pronto.
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
O código funciona, mas gostaria de saber se existe outra maneira de obter o mesmo resultado.
Você poderia criar um pipe nomeado
mkfifo
e lê-lo. As leituras serão bloqueadas até que algo seja gravado no canal, sem necessidade de pesquisa manual. Algo como:Mudei para
mktemp -d
como uma alternativa, esperançosamente, mais segura para obter um nomemktemp
e depois usar esse nome commkfifo
.Você já ouviu falar de inotifywait ? Parece o que você deseja.
(Costumo usar entr para executar alterações no arquivo - mas acho que você pode atingir seu objetivo com inotifywait.)
tail
O comando tem um sinalizador-f
/--follow
que informa para "gerar dados anexados à medida que o arquivo cresce" . Então você pode usar ohead
comando para esperar até que a primeira linha seja gravada no arquivo.Observe que só funcionará se houver uma nova linha no final da primeira linha (o que é verdade no seu caso, pois
echo
adiciona uma nova linha ao final da string por padrão).