2017-04-04 86 views
1

经过几个小时的骚动后,我放弃了。带当前目录的bash前缀输出

我有一个bash功能的长期运行构建脚本,姑且称之为“建”:

function Build() { 
    cd /plugins 
    make 
    cd /acc 
    make 
} 

...我想从脚本输出到每行前缀当前目录,如:

/plugins: configure: checking for gcc 
/plugins/inner: making inner modules 
... 
/acc:  configure: checking for speed of strstr. 
/acc/misc making misc pieces 

....等等。脚本中有几十个“cd”,所以我不想改变每一个。尝试各种管道组合awk和陷阱DEBUG,但没有喜悦。

任何想法?

回答

1

你可以尝试重写内置cd与功能,如:

cd(){ builtin cd "[email protected]"; pwd } 

或者,如果你真的想仪器的每一个命令,然后:

trap "eval 'echo -n $PWD:'" DEBUG 

来,甚至追查真的每chdir系统调用在实际bash脚本的子进程中(例如make),可以使用strace

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

试过了。 cd()函数只捕获脚本中明确存在的cd,而不是makefile中的cd。 – user3734586

+0

试过了。 cd()函数只捕获脚本中明确存在的cd,而不是makefile中的cd。 DEBUG陷阱只回应PWD的值,而不是当前执行pwd的结果。另外,它似乎只在主脚本中捕获命令,而不是任何剥离的makefile。有任何想法吗? – user3734586

+0

您无法在bash脚本中跟踪make过程中的chdirs。但是,您可以尝试设置环境变量MAKEFLAGS = -w,以便make会跟踪它自己的chdirs。 但是如果你真的想跟踪任何进程中的所有'chdir'系统调用,那么我想''strace'或类似的LD_PRELOAD c库的破解是要走的路。 – jil