Отображение вывода команды в терминале при использовании подстановки команд

Поэтому я пытаюсь проверить вывод команды, но я также хочу иметь возможность отображать вывод непосредственно в терминале.

#!/bin/bash
while :
do
OUT=$(streamlink -o "$NAME" "$STREAM" best)
echo "$OUT"
if [[ $OUT == *"No playable streams"* ]]; then
  echo "Delaying!"
  sleep 15s
fi
done

Это то, что я пытался сделать.

Код проверяет, содержит ли вывод команды эту подстроку ошибки, если это так, то добавляется ли задержка. Это хорошо работает в этой части.

Но это не работает, когда команда на самом деле успешно загружает файл, поскольку не выполнит это эхо, пока не завершит загрузку (что может занять несколько часов). Так что до тех пор у меня нет возможности лично проверить вывод команды

Кроме того, вывод этой конкретной команды отображает и обновляет скорость и размер файла в режиме реального времени, что-то, что эхо не сможет воспроизвести.

Так есть ли способ отображать выходные данные команды в режиме реального времени, а также заменять их командой, чтобы проверить выходные данные для подстрок после завершения команды?

1 ответ

Используйте временный файл:

TEMP=$(mktemp) || exit 1

while true
do
    streamlink -o "$NAME" "$STREAM" best |& tee "$TEMP"
    OUT=$( cat "$TEMP" )
    #echo "$OUT" # not longer needed
    if [[ $OUT == *"No playable streams"* ]]; then
        echo "Delaying!"
        sleep 15s
    fi
done

# not really needed here because of endless loop
rm -f "$TEMP"
Другие вопросы по тегам