シェルとは何か
シェル(shell)は、入力されたコマンドを読み解き、適切なプログラムを起動するソフトウェアです。PowerShell、Bash、sh などがあり、それぞれ使える構文や機能が異なります。
ターミナルに文字を入力しているとき、その文字を解釈している中心がシェルです。
一文でいうと
シェルとは、コマンドの言葉とOS上のプログラム実行をつなぐ解釈役です。
The Open GroupのShell Command Languageは、シェルをコマンド言語のインタープリターとして説明しています。シェルは入力を単語や演算子へ分け、構文を解釈し、組み込み機能や実行ファイルなどを呼び出します。
個人開発のどこで登場するか
依存関係のインストール、開発サーバーの起動、Git操作、テスト、ビルド、デプロイなどで登場します。
たとえば同じ git status というコマンドをPowerShellとBashから実行できます。ただし、複数のコマンドをつなぐ書き方、環境変数の設定、引用符、ファイル検索などはシェルごとに異なります。
手順書のコマンドが動かないときは、OSだけでなく、どのシェル向けに書かれているかを確認します。
入力が実行されるまで
シェルはおおむね次の流れで入力を扱います。
入力された文字列を読む
引用符、変数、演算子などを解釈する
コマンド名を組み込み機能や実行ファイルから探す
引数と環境を渡して実行する
終了コードや出力を受け取る
見た目が一行でも、パイプや条件演算子で複数の処理がつながっている場合があります。途中の一件だけ失敗しても、後続処理が実行される書き方もあります。
ターミナル、CLI、コマンドと区別する
ターミナル:文字の入力と出力を表示する画面
シェル:入力を解釈し、プログラムを実行するソフトウェア
コマンド:シェルなどへ与える一件の指示
CLI:文字で特定のソフトウェアを操作する窓口
PowerShell/Bash:異なる機能と構文を持つ具体的なシェル
ターミナルを変えなくても、その中で使うシェルを切り替えられます。反対に、同じシェルを異なるターミナルアプリから使うこともできます。
展開された後の内容を意識する
変数、ワイルドカード、引用符は、プログラムへ届く前にシェルが解釈することがあります。意図より多くのファイルが対象になったり、秘密値が履歴や出力へ現れたりする原因になります。
手順が自分のシェル向けか確認する
現在の作業ディレクトリを確認する
変数やワイルドカードが何へ展開されるか確認する
削除、上書き、本番操作は対象を先に列挙する
終了コードと標準エラー出力まで読む
理解できない複数行をまとめて貼り付けず、一件ずつ目的と影響を確かめます。
次に読む記事
表示する画面はターミナルとは何か、一件の命令はコマンドとは何か、文字による操作窓口はCLIとは何かへ進みます。ファイルの場所はパスとは何かで確認できます。