好的,问题的顶级描述.我希望能够为bash添加一个钩子,当用户输入时,例如$cat foo | sort -n |更少,这被拦截并翻译成包装’cat foo | sort -n |减’.我已经看到了在每个命令之前和之后运行命令的方法(使用DEBUG陷阱或PROMPT_COMMAND或类似命令),但没有关于如何拦截每个命令并允许它由另一个进程处理的方法.有没有办法做到这一点?
为了解释我为什么要这样做,以防人们有其他方法来处理它:
像script这样的工具可以让您将在终端中执行的所有 *** 作记录到日志中(在某种程度上,可以记录bash历史记录).然而,他们做得不是很好 – 脚本将输入与输出混合成一个大字符串,并与诸如vi等接管屏幕的应用程序混淆,历史记录只给出输入的原始命令,并且它们都不起作用好吧,如果您同时输入多个终端的命令.我想要做的是捕获更丰富的信息 – 例如,命令,执行的时间,完成的时间,退出状态,stdin和stdout的前几行.我也更喜欢将它发送到一个可以愉快地复用多个终端的监听守护进程.执行此 *** 作的简单方法是将命令传递给另一个程序,该程序可以执行shell以处理作为子进程的命令,同时获取stdin,stdout,退出状态等的句柄.可以写一个shell来执行此 *** 作,但是你’ d失去了bash中的大部分功能,这会很烦人.
这样做的动机来自于试图理解探索性数据分析,就像事后的程序一样.有了这样更丰富的信息,就可以生成关于发生的事情的正确报告,将一个命令的多个调用压缩到一个命令,其中前几个命令给出非零退出,通过搜索触及文件的所有内容来询问文件来自何处,等等
解决方法 运行此bash脚本:#!/bin/bashwhile read -e linedo wrapper "$line"done
在最简单的形式中,包装器可以包含eval“$liNE”.你提到想要有时间,所以也许有时间评估“$line”.你想捕获退出状态,所以这应该是行save = $?.而且,你想捕获stdout的前几行,所以一些重定向是有序的.等等.
更多:Jo So建议包含对多行bash命令的处理.在最简单的形式中,如果eval返回“语法错误:意外的文件结束”,那么您希望在继续之前提示输入另一行.更好的是,要检查正确的bash命令,请在执行eval之前运行bash -n<<<“$line”.如果bash -n报告行尾错误,则提示输入更多内容以添加到“$line”.等等.
总结以上是内存溢出为你收集整理的linux – Bash(或其他shell):用函数/脚本包装所有命令全部内容,希望文章能够帮你解决linux – Bash(或其他shell):用函数/脚本包装所有命令所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)