【发布时间】:2015-02-05 11:57:42
【问题描述】:
好吧,因为我不是专业人士,所以请多多包涵,这是一个概念验证项目,用于了解有关我的 shell、编程和基本 bash 脚本的更多信息。
所以我想要做的是:每当在我的终端中打印出任何内容时,无论是命令的结果还是来自 shell 的错误消息,我都想对正在显示的内容应用一些“过滤器”,例如如果我在终端中输入“ls -a”,我想获取命令返回的文件夹列表,但对字符应用 TIME DELAY 以便看起来列表是实时输入的。
更具体地说,我希望脚本在 STDOUT 中获取每个字母数字字符,并花费特定时间(比如 100 毫秒)迭代随机字符(这些可以从列表中随机访问),然后最终停止字符的原始值。
我知道的: 不多,我一般是编程新手,bash 语言也是如此,但我可以阅读一些代码并浏览我发现这个http://brettterpstra.com/2012/09/15/matrixish-a-bash-script-with-no-practical-application/ 与 tput 一起播放的脚本。这向我展示了我想要完成的视觉效果可以实现......现在让打印到 STDOUT 的每个字符有序且单独地发生......这是我无法弄清楚的。
我的想法: 在我看来,我知道我可以将 STDOUT 用管道传输到一个文件中,通过任何语言(比如说 python!)我可以进行各种字符串操作,然后将输出返回到 STDOUT,但我想要字符进行实时操作,例如,如果代码是
cool_chars="£ ア イ ウ エ オ カ キ ク ケ コ サ シ ス "
stdout=whatever module works to grab STDOUT from shell as string
stdout = stdout.split(" ")
for word in stdout:
for letter in word:
n=0
while (n<10):
#print the following iteration in real time @ shell but how????
print random.choice(cool_chars)
#finally stop at correct character
print letter
n++
无论如何,我已经阅读了一些关于 curses 和 ncurses 以及如何使用任何指定参数创建新窗口的内容,我想知道是否只是使用 curses 库创建具有指定参数的终端和然后创建一个链接,以便每个新的终端实例打开我修改后的 curses shell,或者我是否可以只做一个 bash shell 脚本,或者使用 python 之类的东西最容易。我知道以上所有内容都可以作为选项,但我正在寻找最简单但不一定是资源效率最高的答案。
感谢任何帮助、cmets、指针等。
【问题讨论】:
-
您必须连接到终端驱动程序或外壳程序才能拦截正常的标准输出。看看
screen和/或最好是tmux如何通过伪 tty 拦截。 -
感谢您接受我的回答,我使用脚本对其进行了编辑,完全解决了您的问题。
-
也许你想要
watch或tail -f?
标签: bash shell text scripting stdout