将命令应用于 bash 终端中的每一行

将命令应用于 bash 终端中的每一行

我今天偶然发现了 lolcat 包。

在此处输入图片描述

我首先想到的是:如果我能通过 lolcat 将来自 stdout 的所有内容传输到终端以获得彩虹效果,那就太棒了。想象一下恶作剧的可能性。

本质上,我要找的是一种将命令应用到从 bash 提示符到标准输出的每一行的方法。

答案1

像这样运行 bash:bash | lolcat

答案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)。按下 tab 键以获取可能的完成选项时,您甚至会得到彩虹输出,我怀疑您是否会通过任何其他建议的解决方案获得这一点。

shell 扩展用于f++这是内置的脚本语言,它具有这些功能和这些可用的类型。但是它无法识别的任何内容都会使用您机器上的(可能是主/默认)shell 作为系统调用运行(因此在 REPL shell 模式下将其称为 shell 扩展)。

Nift 将查找你机器上安装的 lolcat 版本,否则使用内置版本,该版本应该是世界上最快的(它与我的 c++ 实现几乎相同lolcat-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以打开彩虹输出。

相关内容