Bashスクリプト内でBashスクリプトを実行する

Bashスクリプト内でBashスクリプトを実行する

環境マネージャをインストールするbashスクリプトを作成しています。これは、複数のディレクトリに何かをインストールする必要があることを意味します。私の他のものを見て質問詳細については。しかし、それは私のアプローチを再び考えさせました。

私はこれを3つの別々のbashスクリプトにすることを検討しています。すると、ある人が他の人に電話をかけます。問題は次のとおりです。source .bash_profile親シェルで作業を実行する必要があります。問題は、bashスクリプト内で呼び出されたbashスクリプトが新しいシェルまたは親シェルで実行されるのか、親シェル内のホストbashスクリプトシェル内の新しいシェルで実行されるのかです。

「シェル - セプション」それが私の脳を調理していることを知っています。私はこのプロセスを自動化したいのですが、これが私が直面している壁です。

答え1

シェルでコマンドを実行すると、そのコマンドは常にそのシェルの子プロセスとして実行されます。

  1. 組み込みシェルです(例cd:)
  2. ソースは(. /path/to/file、、source /path/to/file
  3. それによって実行されますexec

簡単チェックをご利用くださいps -e -o pid,ppid,user,args

source .bash_profile変数がエクスポート用にマークされている場合にのみサブシェルに影響します(参照declare -x)。

答え2

実際の違いは次のとおりです。

  • コマンドを実行すると、シェルは子プロセスを生成します。以前に子プロセスで定義されていたすべての環境変数は、親プロセスで失われます。

  • スクリプトを使用して、source現在のプロセス(親プロセス内)で強制的に実行するようにします。これにより、スクリプトの環境変数が保存されます。

関連情報