拦截 bash 脚本函数/系统调用并将它们包装到自定义函数中
Posted
技术标签:
【中文标题】拦截 bash 脚本函数/系统调用并将它们包装到自定义函数中【英文标题】:Intercept bash script functions/system calls and wrap them into custom function 【发布时间】:2016-03-03 13:52:48 【问题描述】:有一堆 bash 脚本,从中触发 python
、bash
、sqlplus
、php
脚本,是否可以创建某种 bash 包装器来拦截每个调用并对其进行修改,例如给定some_script.sh
,代码如下
#! /bin/bash
source $SOME_ENV/activate
python some_script.py
我不想打电话给$: python some_script.py
,而是打电话给$: time python some_script.py
所以我想要做的是拦截对python, php, sqlplus
的调用或其他
并在每次调用中插入time
命令,而不是收集时间并将其保存到某个地方,知道该时间与哪个脚本相关。
有可能吗?
【问题讨论】:
【参考方案1】:如果activate
应该启用这个功能,它可以填充如下功能:
python()
echo python "$@" >>timelog.txt
time command python "$@" 2>>timelog.txt;
这不会像 time
内置函数正常工作一样工作。特别是,它不会对管道进行计时;它只会计时python
调用本身。此外,从脚本到 stderr 的任何输出都将被重定向到日志文件。
【讨论】:
考虑printf "python"; printf " %q" "$@"; printf "\n"
而不是echo
。它会正确引用所有参数。以上是关于拦截 bash 脚本函数/系统调用并将它们包装到自定义函数中的主要内容,如果未能解决你的问题,请参考以下文章
将 ActiveX 包装到拦截调用(ActiveX 代理包装器)