[Ubuntu-zh] bash有办法hook命令吗?
Linzhe Lee
slayercat.subscription在gmail.com
星期二 一月 8 23:46:00 UTC 2013
hi~list:
首先祝大家新年快乐。
最近有一个小小的设想,希望能在bash的手工输入指令中实现钩子的功能。
即:若钩子功能开启,每条手工输入并回车的指令,在被执行之前,都会先调用指定的sh脚本文件或二进制可执行文件进行判断。并根据执行的返回值,判断是否继续执行该指令。
同时,若有可能,在同步的执行完这条指令之后,若功能启用,可以将执行的命令行及执行的返回值送给另一个指定的sh文件或二进制可执行文件。
就我的一些搜索,似乎没有找到相关的功能。
我花了一些时间看源代码,并尝试实现了一下。就目前而言我有两个思路:
思路1:在执行之前,手工构建命令并首先执行,最终根据执行结果来判断是否执行。
我按照这个尝试着做了一下,但很遗憾的是,实现结果非常的丑陋(构建命令树相关的条目,只有这里被我手工调用了,其他的调用都发生在yacc生成的代码中)。同时,大量的指针让人无所适从。实际上我看了一段时间后还是没有发现bash是如何回收内存的。编写出来的原型有明显的大量内存泄露,与编写执行的功能不相匹配。
思路2:修改yacc使之允许(){}函数。任何命令都被理解为对该函数的调用。这个看起来比较优雅。
但若按照这个进行,可能影响的范围过大,包括sh等文件很可能也会受这个的影响。同时,需要考虑(){}中的对自身的无穷递归调用。这些都有待进一步的思考和探索。
这是不才的一点点看法。请大家指教。当然,很可能完全不需要修改源代码(同时,这个功能的提出都可能被官方否决)而有现成的解决方案。请各位多多教诲。
非常感谢各位。
再次祝各位新年愉快。
li
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: <https://lists.ubuntu.com/archives/ubuntu-zh/attachments/20130109/52e7f20b/attachment.html>
关于邮件列表 ubuntu-zh 的更多信息