经过几个小时的抨击,我放弃了。
我在bash函数中有一个长时间运行的构建脚本,我们称之为“Build”:
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,但没有快乐。
有什么想法吗?
答案 0 :(得分:1)
您可以尝试使用以下函数覆盖内置cd
:
cd(){ builtin cd "$@"; pwd }
或者,如果您真的想要检测每个命令,那么:
trap "eval 'echo -n $PWD:'" DEBUG
或者即使在实际bash脚本的子进程内部(例如chdir
)内实际跟踪每个make
系统调用,您也可以使用strace
:
strace -f -e trace=chdir bash build.sh