拦截 bash 脚本函数/系统调用并将它们包装到自定义函数中

Posted

技术标签:

【中文标题】拦截 bash 脚本函数/系统调用并将它们包装到自定义函数中【英文标题】:Intercept bash script functions/system calls and wrap them into custom function 【发布时间】:2016-03-03 13:52:48 【问题描述】:

有一堆 bash 脚本,从中触发 pythonbashsqlplusphp 脚本,是否可以创建某种 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 脚本函数/系统调用并将它们包装到自定义函数中的主要内容,如果未能解决你的问题,请参考以下文章

LINUX对shell命令的拦截

从包装二进制文件调用脚本时未设置 Bash 变量

将 ActiveX 包装到拦截调用(ActiveX 代理包装器)

删除功能仍然可用

如何在 C 或 C++ 中包装参数并将它们传递给 system 或 exec*

sh 简单的bash脚本,用于获取并将执行文件夹中的所有repos拉到它们所在的最新分支