環境マネージャをインストールするbashスクリプトを作成しています。これは、複数のディレクトリに何かをインストールする必要があることを意味します。私の他のものを見て質問詳細については。しかし、それは私のアプローチを再び考えさせました。
私はこれを3つの別々のbashスクリプトにすることを検討しています。すると、ある人が他の人に電話をかけます。問題は次のとおりです。source .bash_profile
親シェルで作業を実行する必要があります。問題は、bashスクリプト内で呼び出されたbashスクリプトが新しいシェルまたは親シェルで実行されるのか、親シェル内のホストbashスクリプトシェル内の新しいシェルで実行されるのかです。
「シェル - セプション」それが私の脳を調理していることを知っています。私はこのプロセスを自動化したいのですが、これが私が直面している壁です。
答え1
シェルでコマンドを実行すると、そのコマンドは常にそのシェルの子プロセスとして実行されます。
- 組み込みシェルです(例
cd
:) - ソースは(
. /path/to/file
、、source /path/to/file
) - それによって実行されます
exec
簡単チェックをご利用くださいps -e -o pid,ppid,user,args
。
source .bash_profile
変数がエクスポート用にマークされている場合にのみサブシェルに影響します(参照declare -x
)。
答え2
実際の違いは次のとおりです。
コマンドを実行すると、シェルは子プロセスを生成します。以前に子プロセスで定義されていたすべての環境変数は、親プロセスで失われます。
スクリプトを使用して、
source
現在のプロセス(親プロセス内)で強制的に実行するようにします。これにより、スクリプトの環境変数が保存されます。