Bashスクリプトにどの外部依存関係があるかを確認してリストする方法は? [コピー]

Bashスクリプトにどの外部依存関係があるかを確認してリストする方法は? [コピー]

スクリプトで使用するコマンドのリストを出力します。 以下で使用するコマンドのリストを作成できます。

set -n file_which_need_to_check.sh > found _commands.txt

または以下を介して:

compgen -c file_which_need_to_check.sh > found_commands.txt

または以下を介して:

shellcheck -x またはこれに似ています:

以下の情報は知られていますが、要求されません。

フォルダのパスまたはすべてのbashファイルを含むリストは、次のように取得できます。

find \ordnerpfad -type f

システムが特定のコマンドをサポートしているかどうかをテストできます。

compgen -ac | grep searchstr

答え1

(私が知っている限り、そして私が想像できる限り)そのようなツールはありません。確認するにはスクリプトを実行する必要があります。特に、大規模で複雑なスクリプトでは、システムで利用可能な項目(ggrep// egrep// bsdgrep/ perl...またはgmakevs makevs bsdmakevs ninja)を検出し、さまざまなタスクを実行することがよくあります。

ソフトウェアの観点から実行する必要があるコマンドは、時々(通常はインストーラとシステム管理ツールを見ている)スクリプトに「組み込まれている」ので、ソースコードを実行しないと実行可能ファイルが何であるかさえわかりません。実行するファイル。

したがって、これを知るには、実行するか、シェル用の完全なコードアナライザを構築する必要があります。これは非常に複雑な作業であり、誰もそうすることを想像することはできません。なぜなら、文書化されていないコードを実行することを避ければよいからです。失敗するまでシェルスクリプトを実行します。 (これは実際のシステムのコンテナ化されたVMレプリカで無料でこれを行うことができます。)
そのようなパーサを書くよりも何に依存しているのかを知るために、問題のすべてのスクリプトを再実装する方が簡単です。

それはすべてスクリプト作成者として優れたソフトウェアエンジニアリングを実行し、どこかに要件を明確に指定することで帰結します。

一部のスクリプトは、スクリプトを実行するためにコンピュータにインストールする必要があるxdotoolなどの他のツールを使用します。

さて、インターネットの暗い隅にあるスクリプトをランダムに実行しないでください!通常、スクリプトはパッケージソフトウェアの形式で提供されます。
たとえば、/usr/bin からランダムに 1 つを選択し、/usr/bin/virt-copy-out私のシステムのスクリプトはlibguestfsFedora パッケージから来ました。システムにそのパッケージが何に依存しているかを尋ねるとbash(明らかにbashスクリプトであり、bashなしでは実行されません)、coreutils(cp、sort、find ...)、、less...などの長いリストがありますtar
したがって、パッケージ(およびスクリプト)の作成者は、パッケージ(含まれるスクリプトを含む)に必要なものを特定するのに時間を費やします。これがディストリビューションパッケージを望む理由の一つです!パッケージをインストールしようとしたときにこれらのいずれかが欠落している場合、パッケージマネージャはこれらのすべての依存関係を自動的にインストールします。

関連情報