2017-02-24 17 views
0

~/Shellディレクトリのすべてのトップレベルシェルスクリプトを実行するファイル~/.zshrcがあります。これらのトップレベルスクリプトは、下位レベルのスクリプトを実行します。たとえば、~/Shell/programsのスクリプト(いわゆる「下位レベルのスクリプト」)は、最上位の~/Shell/09-programs.shスクリプトによって実行されます。私は最近、~/.zshrcの実行が以前よりもはるかに遅くなり、私の~/Shellディレクトリのどのスクリプト(またはスクリプトのセット)がそれが遅くなるのかを判断する方法があるかどうかを知りたいと思います。また、スクリプトが非常に遅くなる各スクリプトの正確な行番号を知ることは役に立ちます。 ~/.zshrcファイルと~/Shellスクリプトhereが私が定期的に更新するGitHubリポジトリです。〜/ .zshrcファイルの読み込みに時間がかかる原因となっている〜/ Shellディレクトリのスクリプトを特定する方法はありますか?

+0

'zsh -x'でデバッグモードで実行すると問題が表示されますか? – Zlemini

+0

特に、行番号とタイムスタンプの両方をダンプする 'PS4'を設定した場合。 –

+0

@Zleminiは素晴らしい作品です。 CharlesDuffyは、行番号とタイムスタンプに興味があるので、私はPS4をどのように設定すべきかの例を与えてくれますので、各スクリプトの所要時間を知ることができます。 – BH2017

答えて

2
PS4=':[%*]:%x:%I+' zsh -x -l -i 

は、それが定義された第二の精度のタイムスタンプ、ファイル名と行番号が先行実行される各ラインを持つ新しいログインシェルを実行します。個人的にかかわらず、私はからの秒数を整数で取得するには、\tのではなく、その場合には$SECONDSを使用する場合があります...

PS4=':[\t]:$BASH_SOURCE:$LINENO+' bash -x -l -i 


ちなみに、これにはbashと同等のようになりますシェル呼び出し。

+0

うーん、これはうまくいきません。何も返さず、次の行に移動します。それが私がそれを一時的に受け入れた理由だと思った。 – BH2017

+0

...もしそれがスクリプト内にあれば、 'PS4 = ':[%*]:%x:%I +'; set -x' - 答えのコードは、インタラクティブなプロンプトで実行されるように与えられています(そして、それはあなたのドットファイルによって実行されるコードです)。 –

+0

私はシェルとしてZshを実行していることを考えればわかりませんが、出力が分からない限り違いは分かりません。 – BH2017

関連する問題