我有一个特定的 Linux 可执行文件,它被一个更大的应用程序调用来执行一些计算。我想修改执行计算的方式,为此我首先需要了解可执行文件的调用方式以及参数和数据的传输方式。
因此,如果调用此可执行文件,我想监视命令行参数、stdin 和 stdout。可执行文件的正常运行不应受到干扰。
有没有简单的方法来做到这一点?
更新:
我尝试了 shell 脚本占位符的想法来使用以下脚本获取所有数据:
#!/bin/bash
export LOGFILE=/tmp/logname
echo `env` > $LOGFILE-env
echo "$@" >> $LOGFILE-arguments
tee -a $LOGFILE-stdin | /path/to/real/executable 2>&1 | tee -a $LOGFILE-stdout
Run Code Online (Sandbox Code Playgroud)
这适用于测试输入,但如果它被真正调用,它就会挂起。可能发生的事情比我想象的还要多。
选项 1 是修改调用应用程序的源代码并插入tee到输出管道中以获取输出的副本以供在该阶段进行审查。
选项 2 是围绕相关可执行文件编写包装脚本。一个快速脚本,将 stdin 和参数传递给真正的应用程序,然后将输出发送到一个位置供您查看,并以同样的方式将其吐出,应用程序应该只需要几行即可启动。把它放在特别的地方,然后将该位置添加到 PATH 变量的前面,然后运行您的应用程序。
#!/bin/sh
cat - | /path/to/realapp $@ | tee /tmp/debug_output
Run Code Online (Sandbox Code Playgroud)