將命令應用於 bash 終端機中的每一行

將命令應用於 bash 終端機中的每一行

我今天無意中發現了 lolcat 包。

在此輸入影像描述

我想到的第一件事是:如果我可以透過 lolcat 將來自 stdout 的所有內容傳輸到終端以獲得彩虹效果,那就太棒了。想像一下惡作劇的可能性。

本質上,我要求的是一種將命令應用於從 bash 提示字元輸出到標準輸出的每一行的方法。

答案1

只需像這樣運行 bash:bash |哈哈貓

答案2

在 bash 會話中,你想做

exec > >(lolcat)

我沒有安裝這個,但有類似的想法:

$ date
Sun Mar 22 20:01:23 EDT 2015
$ exec > >(rev)
$ date
5102 TDE 23:10:02 22 raM nuS

答案3

我為世界上最快的網站產生器做了一個 shell 擴展,我稱之為尼夫特。它有一個復活節彩蛋,您可以在其中打開大多數事情的 lolcat 輸出lolcat.on(在使用例如啟動 shell 後nift sh)。當按選項卡以獲得可能的完成選項時,您甚至會得到彩虹輸出,我懷疑您是否通過任何其他建議的解決方案得到了這一點。

外殼擴展用於f++這是內建的腳本語言,它具有這些功能和這些可用的類型。但它無法識別的任何內容都會使用電腦上的(可能是主/預設)shell 作為系統呼叫運行(因此將其稱為 REPL shell 模式下的 shell 擴展)。

Nift 將尋找您電腦上安裝的 lolcat 版本,否則使用它的內建版本,這應該是世界上最快的(它與我的 C++ 實作幾乎相同)哈哈貓cc這是世界上最快的)。我強烈建議在 Nift 之上安裝 lolcat-cc (或 lolcat 的另一個版本),否則您會經常為基本上所有系統調用運行 ~5mb Nift 二進位文件,而不是為 lolcat 運行 <1mb 二進位。

f++ 也是一種有趣的腳本語言。拿例如建立和刪除 100k 空文本檔的腳本。在我的機器上,運行時間約為 3.5 秒,而Bash 腳本做基本上同樣的事情需要大約 3 分鐘!您可能已經從f++ 腳本中註意到了一些很酷的事情,您可以在字串內擴展變量,您可以使用類型定義變量,您可以透過函數呼叫將變數擴展為多個參數,您可以擁有超過10k 個輸入參數函數呼叫(應該可以有數百萬個!)。

您可以找到有關 Nift REPL 的更多資訊(包括不同平台的捷徑)這裡

如果您需要定義 shell 變數(不是透過 f++,而是透過底層 shell),那麼您將需要使用 sys/system 函數來執行程式碼區塊。您也可以為 Lua(JIT) 和 ExprTk 執行類似的程式碼區塊,因為它們都嵌入到 Nift 中。您也可以使用 Lua 和 ExprTk 來存取/修改 f++ 變數。

這樣就得到了這個shell(擴展名)。透過套件管理器安裝 Nift,或從 GitHub 複製、製作和安裝。nift sh在終端機中輸入啟動 Nift f++ shell 擴展,然後輸入lolcat.on來開啟彩虹輸出。

相關內容