Bash

將輸入傳遞到輸出並執行命令的命令?

  • October 31, 2014

我正在嘗試使用該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

引用自:https://unix.stackexchange.com/questions/165128