Bash
將輸入傳遞到輸出並執行命令的命令?
我正在嘗試使用該
quote
程序製作一個小 shell 腳本,該腳本將每秒不斷更新股票價格。quote
必須訪問 Internet,因此在執行時會有一點延遲。我每次都必須清除螢幕,但我想在quote
完成後和列印其輸出之前清除,因此andcat
之間沒有明顯的延遲: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
. 這是什麼命令?
我想在報價完成後和 cat 列印其輸出之前清除
因此,您正在尋找的並不是實際執行(這很容易:)
clear
,因為在完成之前仍會開始列印。管道無法解決您的問題,因為它並行執行生產者和消費者。相反,您需要儲存 的輸出,然後顯示它。將命令替換的輸出儲存到變數中。cat``quote … | { clear; cat; }``cat``quote``quote
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%.}"
很高興讓它工作,但看起來你正在重新發明“手錶”。
另外,每隔一秒查詢可能有點過分?我會選擇 20 秒或更長時間,尤其是當“觀看”可以向您展示跑步之間的差異時。
watch -n 20 -d quote spy gld aapl amzn goog nflx tsla f gm msft