2017-04-04 44 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