他のスクリプトBでスクリプトAを再利用する方法は2つあります。正しいですか?
スクリプトBはスクリプトAをコマンドとして呼び出します(BはAを実行するための子プロセスを作成します)。
いつどのような方法を使うべきかを知りたいです。
どちらも機能できる場合でも、どのような理由で優先されますか?
ありがとうございます。
ベストアンサー1
どちらの方法も有効ですが、非常に異なります。
スクリプトB内でスクリプトAを使用すると(コマンドで呼び出す)、スクリプトAのみを使用して、スクリプトBなしでスクリプトAが実行できるすべての操作を実行できます。
スクリプトAの作業部分を関数に移動して、ある種のライブラリに置き換えることができます。その後、スクリプトA自体は複数の関数を定義する以外に何もしません。他のスクリプトはそれをインポートして関数自体を使用する必要があります。
どちらの方法も完全に有効であり、どちらも非常にまれではありません。どのようなものを使うかは、完全にスクリプトAが最初に行っていた作業、その作業を続けるべきかどうか(この場合、それをライブラリに切り替えるのは疑問の余地がない1 )、派生できるスクリプトBよりも多くのスクリプトがかどうかによって異なります。 A-as-a-libraryの利点を享受できるスクリプト機能が提供されています。
ㅏ第三明らかに可能性は、スクリプトAとBのすべての共通ビットをスクリプトCの関数に入れることです。その後、スクリプトCは関数ライブラリとして機能し、他の2つのスクリプトは最初にそれをインポートして使用します。極端なケースでは、一部のコマンドライン解析やその他の管理タスク(入力ファイルと出力ファイルの設定など)を除いて、AとBのいずれかまたは両方がほとんど空になる可能性があります。
1もちろん、実行可能なシェルコードライブラリもあります。たとえば、参照してください。bashシェルスクリプトで実行コードとソースコードを区別しますか?
私の問題はエレガントではないということです(個人的な意見)。その他の変更は以下で確認できます。このStackOverflowの答えこれは、使用されるシェルの種類を検出し、各シェルに対して異なる操作を実行することに依存します。
スクリプトとしてのライブラリに関する私の問題(使用方法を検出するために多少汚れたコードに依存することを除く)は、奇妙なハイブリッドになるということです。もの呼び出し方法に応じて、完全に独立した2つの機能を提供します。他のスクリプトをインポートするときに選択できる機能を定義しますが、コマンドとして使用するとコマンドのように動作します。これに関するマニュアルを書くのは厄介です(どのマニュアルセクションに分類する必要がありますか?)。
私はむしろ(これは私の個人的な意見です)、ライブラリの場所を純粋なシェルライブラリファイルに分割し、それを使用する必要があるユーザー呼び出し可能スクリプトからそのライブラリファイルを取得することを好みます。これは、共有ライブラリと実行可能なバイナリと同じデザインに従います。