他のスクリプトから呼び出されたすべてのスクリプトを表示する方法はありますか?

他のスクリプトから呼び出されたすべてのスクリプトを表示する方法はありますか?

修正するスクリプトがたくさんあります。各スクリプトは5〜10の異なるスクリプトを呼び出すことができますが、これは複数の異なるスクリプトを呼び出すことができます。

特定のスクリプトから呼び出されたスクリプトのリストを取得する方法はありますか?

私は次のことを考えています:

/home/root/ $ showscripts mytargetscript

出力は次のようになります。

/home/root/mytargetscript
/home/root/asubscript
/home/root/bsubscript
...

私がUnixの神々を不愉快にした場合、私はあらかじめ悔い改めます。私はdba.seで多くの質問に答えます。

ベストアンサー1

スクリプトはさまざまな方法で他のスクリプトを呼び出すことができるため、普遍的な解決策はありません。grepスクリプトには機能しますが、通常は機能しない操作を実行できます。

これはどのスクリプトを呼び出しますか?

$(find / -executable -name "*.sh" -print0 | shuf -z -n 1)

実際にこれらのスクリプトを実行できる場合は、2つの方法で追跡できます。

set -x

スクリプトが実行されるすべてのコマンドが拡張形式で印刷されます。その後、これらのコマンドのいずれかがスクリプトを実行していることを確認できます。

strace -ff

Overkillはstraceすべての進行状況を提供し、オプションを使用する-ffと最後までウサギの穴に降ります。私はそれをバイパスする方法があるので、ほとんどそう言います。デーモンプロセスに従いますか?

Grepを呼び出すかstraceフィルタリングしてスクリプトファイルを見つけると、おそらく[実行中のスクリプトの単一実行に対して - 他の条件でのみ呼び出されるスクリプトを除いて]完全な画像に近づくでしょうopen()exec*()

$ strace -ff ./testscript.sh |& grep 'open.*\.sh"' 
open("./testscript.sh", O_RDONLY)       = 3
[pid 24486] open("./CD-DVD Image erstellen.sh", O_RDONLY) = 3

したがって、クリエイティブに解決策を思いつくことができますが、すべての場合に適用される一貫した解決策を期待しないでください。

おすすめ記事