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