2017-04-04 4 views
1

2時間のフレーミングの後、私は諦めます。bashプレフィックスは現在のディレクトリに出力されます

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

を...と私は、スクリプトからの出力は、各ラインに接頭辞を希望される:

私は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への配管とDEBUGのトラップの様々な組み合わせを試しましたが、喜びはありません。

アイデア?

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

それとも、本当に、その後、すべてのコマンド楽器にする場合:

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

、あるいは本当にすべてのchdirシステムコールをトレースする

答えて

1

あなたは、組み込みの機能を備えたcdのようにオーバーライドしてみてください実際のbashスクリプト(例えばmake)の子プロセスの内部では、使用することができますstrace

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

試してみました。 cd()関数は、明示的にスクリプト内にあるcdをトラップし、makeファイル内のものはトラップしません。 – user3734586

+0

それらを試してみてください。 cd()関数は、明示的にスクリプト内にあるcdをトラップし、makeファイル内のものはトラップしません。 DEBUGトラップは、pwdを実行した現在の結果ではなく、PWDの値をエコーし​​ます。それだけでは、メインのスクリプトにコマンドをトラップするように見えますが、スパン・オフのメイクファイルはありません。何か案は? – user3734586

+0

bashスクリプトからmakeプロセス内のchdirをトレースすることはできません。しかし、環境変数 'MAKEFLAGS = -w'を設定してmakeがchdirs自身をトレースするようにすることができます。 しかし、実際にすべてのプロセスから 'chdir'システムコールをトレースしたいのであれば、' strace'やLD_PRELOADedと同様のハックがあると思います。 – jil

関連する問題