将输入传递到输出并执行命令的命令?

将输入传递到输出并执行命令的命令?

我正在尝试使用该quote程序制作一个小 shell 脚本,该脚本将每秒更新股票价格。quote需要访问互联网,因此运行时有较小的延迟。我每次都必须清除屏幕,但我想在quote完成之后和打印其输出之前清除,这样在和cat之间没有明显的延迟:clearcat

while true
do
   quote spy gld aapl amzn goog nflx tsla f gm msft | ??? clear | cat
   sleep 1
done

我希望???命令(当然在打印其输出之后运行quote)运行,clear然后将输出quote直接传递到 的输入cat。这是什么命令?

答案1

很高兴让它发挥作用,但看起来你正在重新发明“手表”。

另外,以一秒的间隔查询可能有点过分了?我会选择 20 秒或更长时间,尤其是当“观看”可以显示跑步之间的差异时。

watch -n 20 -d quote spy gld aapl amzn goog nflx tsla f gm msft

答案2

我想在 quote 完成后和 cat 打印其输出之前清除

clear因此,您要寻找的实际上并不是要运行cat(这很容易:)quote … | { clear; cat; },因为cat仍然会在quote完成之前开始打印。管道无法解决您的问题,因为它并行运行生产者和消费者。相反,您需要存储 的输出quote,然后显示它。存储a的输出命令替换到一个变量中。

text=$(quote spy gld aapl amzn goog nflx tsla f gm msft)
clear
echo "$text"

这会删除输出末尾的空白行。如果这是不可接受的,您可以通过在末尾打印一个额外的非空行并将其剥离来解决此功能。该命令echo还会破坏一些以 开头的短字符串-

text=$(quote spy gld aapl amzn goog nflx tsla f gm msft; echo .)
clear
printf %s "${text%.}"

答案3

这不完全是我所要求的,但它完成了工作。我将一个变量设置为 的输出quote。我一开始并没有想到这一点,因为我是 Bash 新手......

clear
while true
do
   OUTPUT="$(quote spy gld aapl amzn goog nflx tsla f gm msft)"
   clear
   echo "${OUTPUT}"
   sleep 1
done

相关内容