Linux 当前目录下的bash前缀输出

Linux 当前目录下的bash前缀输出,linux,bash,build,Linux,Bash,Build,经过几个小时的折磨,我放弃了 我在bash函数中有一个长期运行的构建脚本,我们称之为“构建”: 。。。我希望脚本的输出在每一行的前面加上当前目录的前缀,比如: /plugins: configure: checking for gcc /plugins/inner: making inner modules ... /acc: configure: checking for speed of strstr. /acc/misc making misc pieces 。

经过几个小时的折磨,我放弃了

我在bash函数中有一个长期运行的构建脚本,我们称之为“构建”:

。。。我希望脚本的输出在每一行的前面加上当前目录的前缀,比如:

/plugins:   configure:  checking for gcc
/plugins/inner:   making inner modules
...
/acc:       configure: checking for speed of strstr.
/acc/misc   making misc pieces
。。。。等等脚本中有几十张“cd”,所以我不想更改每一张。尝试了各种管道到awk和陷阱调试的组合,但没有乐趣


有什么想法吗?

您可以尝试使用以下功能覆盖内置的
cd

cd(){ builtin cd "$@"; pwd }
或者,如果您真的想为每个命令插入指令,那么:

trap "eval 'echo -n $PWD:'" DEBUG
或者,要真正跟踪每个
chdir
系统调用,即使是在实际bash脚本的子进程中(例如
make
),也可以使用
strace

strace -f -e trace=chdir bash build.sh

我试过了。函数的作用是:只捕获脚本中显式存在的cd,而不是makefiles中的cd。请尝试这些方法。函数的作用是:只捕获脚本中显式存在的cd,而不是makefiles中的cd。调试陷阱只回显PWD的值,而不是执行PWD的当前结果。另外,它似乎只在主脚本中捕获命令,而不是任何派生的makefile。有什么想法吗?您无法从bash脚本跟踪make进程中的chdirs。但是,您可以尝试设置环境变量
MAKEFLAGS=-w
,以便make可以自己跟踪chdirs。但是,如果您真的想跟踪任何进程中的所有
chdir
syscalls,那么我想
strace
或类似的使用LD_预加载的c-library的hack是一个不错的选择。
strace -f -e trace=chdir bash build.sh