2011-09-26 5 views
7

コマンドやその他のツールを使用したシェルスクリプトがたくさんあります。シェルスクリプトで使用されるすべてのツールを取得する方法

シェルスクリプトが使用しているすべてのプログラムを一覧表示する方法はありますか? ソースコードから依存関係を取得する方法の種類。

+0

あなたの質問は不明です、例えば "ツールを解析する"は意味がありません。あなたのスクリプトが使用したプログラムのリストをお探しですか?またはあなたのスクリプトを使用するプログラムのリスト? –

+0

質問が更新されました。私は、シェルスクリプトを使用するプログラムのリストを探しています。 – deimus

答えて

2

パイプを翻訳するのにsedを使用し、改行に$(を使用し、コマンドの可能性がある場合は、awkを使用して最初のワードを出力します。

sed 's/|\|\$(/\n/g' FILENAME | 
awk '$1~/^#/ {next} $1~/=/ {next} /^[[:space:]]*$/ {next} {print $1}' | 
sort -u | 
xargs which 2>/dev/null 
2

実行可能な方法は実行時です。 debug modeのbashスクリプトを-xオプションで実行し、出力を解析することができます。実行されたコマンドと引数のすべてが標準出力に出力されます。私は一般的な解決策を持っていませんが

+0

bash --rpm-requiresは人間が判読可能な方法でこれを行います...スクリプトを実行しないでこれを行うオプションはありませんか? – deimus

+0

私はあなたがスクリプトを実行することなくそれを確実に行うことはできないと思います。 [Here](http://stackoverflow.com/questions/3926918/determine-function-and-file-dependency-of-a-shell-script/3928062#3928062)私が見つけた唯一のツールはおそらくそれを行うことができます。 – ks1322

1

、次の2つのアプローチを試みることができる:あなたのスクリプトによって実行されたプログラムを確認するためにstraceのを使用する場合があります

  1. pbuilder環境でプログラムを実行し、欠落しているパッケージを確認することができます。
0

シェルの動的な性質のため、スクリプトを実行しないとこれを実行できません。例えば

TASK="cc foo.c" 
time $TASK 

これはccは、上記のようにしても、このような簡単な例で呼び出されたことを実行せずに決定することは本当に難しいだろう。

実行時には、thiton(+1)とks1322(+1)によって指摘されているデバッグ出力sh -x myscriptを検査できます。またstraceのようなツールを使ってexec()のシステムコールをすべて捕まえることもできます。

関連する問題