詳細のシェルスクリプトの実装

シェルスクリプトを実行すると、それは最初のシステム環境変数ENVを探し、環境変数はファイル(通常は/etc/profile,~/.bash_profile,~/.bashrc,/etc/bashrcロード順序など)、読み込みを指定します上記の環境変数ファイルの後に、シェルは、コンテンツのシェルスクリプトを実行し始めました。

シェルスクリプトは、あなたがサブスクリプトシェルスクリプトが発生した場合(つまり、ネストされたスクリプト)を実行してコマンドの実装を超える左から右へ、各ラインのトップダウン、コマンドの実行と文、つまり、であり、コンテンツは、サブスクリプトの最初の実装である親スクリプト内の後続のコマンドとステートメントの実行を継続するためのスクリプトの完了後に親に戻ります。

際、シェルスクリプトの実行、カーネルはこのサブプロセスでコマンドやスクリプトシェルスクリプトを実行するための新しいプロセスを要求して開始します。通常、基本的なプロセスが示されています:
詳細のシェルスクリプトの実装

通常、いくつかの方法で実行されているシェルスクリプトを使用することができます。
1)bashスクリプト名またはshスクリプト名: -使用する必要はありません)方法がよく用いられ、またはスクリプトファイルの先頭には、インタプリタを指定された実行可能な権限がない場合には(すなわち、ファイルのパーミッションは、xスクリプトファイルのプロパティ自体はビット方法;
2)パス/名前またはscript-./script-name:スクリプトを実行するために、現在のパスに参照する(スクリプトが実行権限を必要とする)、実行可能ファイルへのスクリプトファイルに必要なアクセス権(すなわち、Xに加えファイル許可ビットを属性)、具体的な方法はchmod + xのスクリプト名。絶対または相対パスを直接スクリプトスクリプトによって行うことができる;
3)スクリプト・ソース名または.script名:「」この方法は、一般的に使用されるソースまたは(ドット)で読み取られ、またはシェルスクリプトを指定ロードさ(例えばsan.shとして)ファイル、次いで、シェルスクリプトファイルで指定されたすべての文の実装続いsan.sh. 現在で実行し、親のシェルスクリプトfather.shプロセスのこれらのステートメント(他のいくつかの新しいモデルは、サブスクリプトの実行のプロセスを開始します)。したがって、使用またはソース。「」San.sh自体は、現在の親のような変数のスクリプトまたは関数値とすることができるシェルが使用するスクリプトfather.shに渡された値を返します。
4)SH <スクリプト名や猫スクリプト名| SH:同じことがbashのに適用されますが、この使用方法は非常に一般的ではありませんが、時にはそれがまた驚きの動きの効果を持つことができ、例えば:ループのサービスを合理化するために、スタートからの起動を達成するためにはありませんケースは、bashの動作にダクトを介して、コマンド文字列のすべてのスプライスされた形式であり、そして、

興味のある友人は、それを自分で試すことができます!

私は個人的に三点があるという結論に来てみてください:
1.サブシェルスクリプトを直接親シェルスクリプト変数から継承されたが、機能しませ逆に、など、(名前は父親と息子のよう、また父親の遺伝子を受け継い);
2。あなたが有効にする場合は、継承し、我々はシェルスクリプトシェルスクリプトをソースに進めるか、親に子をロードする必要があります(その遺伝子はまた、彼の父の息子を継承したように、彼の息子の姓を持つ父親は、場合のように)」。 『;
ソースまたは3.』 。「ロード・スクリプトは、現在のシェルでのスクリプトの実行以降に実行されているので、スクリプトの終了後に、(機能を含む)スクリプト変数値は、まだ現在のシェルに存在し、SHおよびbashは新しい子を起動するスクリプトを実行しますシェルの実行、親シェルへの実装の復帰後。したがって、(機能を含む)の変数の値等を確保できません。そこに参照のための需要があるか、処理後に、スクリプトやその他のスクリプト、スクリプトまたはコンフィギュレーションファイルをロードするための最良の使用。「」またはソースのコンフィギュレーションファイルを実行した場合、開発中のシェルスクリプト、その後にそれらをロードします次のスクリプトは、あなたは、このようなソースのロードなどのスクリプトや設定ファイルの変数と関数の内容を呼び出すことができます。

おすすめ

転載: blog.51cto.com/14157628/2432456