首页 > 解决方案 > 使用命令替换时在终端中显示命令输出

问题描述

所以我试图检查命令的输出,但我也希望能够直接在终端中显示输出。

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

这就是我试图做的。

该代码检查命令的输出是否包含该错误子字符串,如果是,则会添加延迟。它在这部分工作得很好。

但是当命令实际上成功下载文件时它不能很好地工作,因为它不会执行该回显,直到它完成下载(这需要几个小时)。所以在那之前我无法亲自检查命令的输出

再加上这个特定命令的输出会实时显示和更新速度和文件大小,这是 echo 无法复制的。

那么有没有办法能够实时显示命令的输出,同时命令替换它们以便在命令完成后检查子字符串的输出?

标签: bashcommand-substitutionstreamlink

解决方案


使用临时文件:

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"

推荐阅读