Skip to content
Latchkey

非対話的シェルとは?プロンプトのないスクリプト

非対話的シェルは、ユーザーにプロンプトを表示せずにスクリプトや入力ストリームからコマンドを実行するもので、ほぼすべてのCI作業が行われるモードです。

対話的シェルはあなたがコマンドを入力するのを待ちますが、非対話的シェルはスクリプトからコマンドを読み込み、プロンプトなしで実行します。CIはほぼ完全に非対話的です。プロンプトに答えたり削除を確認したりする人間がいません。これを認識すると、決して届かない入力を待ってコマンドがハングするなど、CI特有の失敗の多くが理解できます。

非対話的とはどういう意味か

シェルは、プロンプトで入力するユーザーに接続されていないとき非対話的です。スクリプトやパイプされたストリームから読み込み、プロンプトを表示せずにコマンドを最後まで実行します。

対話的対非対話的

対話的シェルはプロンプトを表示し、行編集と履歴をサポートし、異なる起動ファイルを読み込みます。非対話的シェルはそれらを一切行わず、与えられたコマンドを実行するだけです。

よくある結果

  • 確認プロンプトはハングするか、end-of-fileを読み込みます。
  • 色付きやページ送りの出力が無効になることがあります。
  • ~/.bashrc のような起動ファイルがsourceされないことがあります。

それに合わせた設計

非対話的な用途向けのスクリプトはプロンプトを避けなければなりません。--yes フラグを渡し、ファイルや環境変数で入力を提供し、人間が介入できると決して仮定しないでください。さもないとスクリプトが停止します。

CIにおける非対話的シェル

すべてのCIステップは非対話的シェルなので、入力を待って一時停止するツールは、timeoutになるまでjobをハングさせます。非対話的フラグを使い、すべての入力を前もって提供し、スクリプトが手動確認を必要としないことを確認してください。

マネージドrunnerでの無人実行

Latchkeyのrunnerでは、jobは非対話的シェルで無人実行されます。すべての決定を、誰も答える人のいないプロンプトではなく、フラグ、環境変数、ファイルで行うようにステップを設計してください。

重要なポイント

  • 非対話的シェルは、プロンプトもユーザーもなしにスクリプト化されたコマンドを実行します。
  • 入力を待つツールは非対話モードでハングします。
  • すべてのCIステップは非対話的なので、すべての入力を前もって提供します。

関連ガイド