拦截并修改bash脚本中的命令

拦截并修改bash脚本中的命令

我有一些脚本,脚本中的一些命令是这样的

./executable arg1 arg2 .. argn

我想把上面的命令改成

LD_PRELOAD=/some/lib ./executable my_arg1 my_argn arg1 arg2 argn; some_other_command

更改脚本的一种方法,但我不想这样做,而是想拦截这些命令,更改这些命令并运行它们。我怎样才能做到这一点?

答案1

首先,将现有的可执行文件移动到新位置:

mv ./executable ./executable.original

其次,在其中创建一个 shell 脚本。将以下命令放入名为的新文件中./executable

#!/bin/sh
LD_PRELOAD=/some/lib ./executable.original my_arg1 my_argn "$@"
some_other_command

shell 将替换"$@"调用arg1 arg2 argn程序提供的咒语。

第三,在新文件上设置执行位:

chmod a+rx ./executable

答案2

在 bash 中你可以有时髦的函数名称,所以这应该完全符合你的要求:

./executable() {
  LD_PRELOAD=/some/lib command ./executable my_arg1 my_argn arg1 arg2 argn
}

当然它不会拦截executable/usr/bin/executable

相关内容