ログインシェルとは?起動ファイルとセッション
ログインシェルは、システムにログインしたときに起動されるシェルで、profileの起動ファイルを読み込んでセッション用の環境をセットアップします。
マシンにログインすると、最初に実行されるシェルがログインシェルです。/etc/profile や ~/.bash_profile のようなファイルを読み込み、セッション全体の環境変数、PATH、エイリアスをセットアップします。CIのステップは通常、非ログインシェルを実行するため、丁寧に設定したprofileの設定がpipelineで適用されないことがよくあります。
ログインシェルとは何か
ログインシェルはログインの一環として呼び出されます。セッションを初期化するログイン起動ファイルをsourceします。PATHの設定、変数の定義、ログインごとに一度行うべきセットアップロジックの実行などです。
読み込む起動ファイル
- システム全体のログイン設定のための /etc/profile。
- ユーザー用の ~/.bash_profile または ~/.profile。
- これらは通常PATHとエクスポートされた変数を設定します。
ログイン対非ログイン
新しいターミナルタブやスクリプトの呼び出しなどの非ログインシェルは、ログインのprofileファイルをスキップし、異なる起動ファイル (~/.bashrc など) を読み込むか、まったく読み込みません。両者は異なる設定を読み込みます。
なぜこの区別が重要か
ログイン専用のprofileに置かれた設定は、非ログインシェルには適用されません。だからこそ、ターミナルで機能するPATHエントリが、非ログインシェルとして実行されるスクリプトでは欠けていることがあるのです。
CIにおけるログインシェル
CIのステップは通常、非ログインで非対話的なシェルを実行するため、~/.bash_profile のセットアップはsourceされません。PATHの追加などbuildに必要なものは、ログインprofileに頼るのではなく、workflowで明示的に設定しなければなりません。
マネージドrunnerでの明示的なセットアップ
Latchkeyのrunnerでは、ステップはログインシェルとして実行されないため、必要な環境とPATHをworkflowで直接定義してください。これにより、sourceされないかもしれないprofileファイルに依存せず、buildを再現可能に保てます。
重要なポイント
- ログインシェルはセッション開始時に実行され、profileの起動ファイルを読み込みます。
- 非ログインシェルはそれらのファイルをスキップするため、ログイン専用の設定は適用されません。
- CIのステップは通常非ログインなので、PATHや変数を明示的に設定します。