使用命令替换时在终端中显示命令输出

时间:2019-05-30 09:55:48

标签: bash command-substitution streamlink

因此,我正在尝试检查命令的输出,但我也希望能够直接在终端中显示输出。

#!/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 个答案:

答案 0 :(得分:0)

使用临时文件:

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"