

コマンドラインインターフェース(CLI)は、コマンドラインシェルとも呼ばれ、[1] [2] は、コマンド(各コマンドはテキスト行としてフォーマットされます)を介してソフトウェアと対話する手段です。コマンドラインインターフェースは、パンチカードの非対話型モードに代わる、対話型でユーザーフレンドリーな代替手段として、1960年代半ばにコンピュータ端末上で登場しました。[3]
約30年間、CLIはソフトウェアの最も一般的なインターフェースでした([異論あり–議論あり]) 。しかし、今日ではグラフィカルユーザーインターフェース(GUI)の方が一般的です。それでもなお、オペレーティングシステムやソフトウェア開発 ユーティリティなど、多くのプログラムは依然としてCLIを提供しています。
CLIでは、コマンドをスクリプトファイルに保存して繰り返し使用できる ため、プログラムの自動化が可能です。スクリプトに含まれるコマンドは、グループとして、プログラムとして、コマンドとして実行できます。
CLI は、入力コマンドを実行するプログラムである コマンドライン インタープリタまたはコマンドライン プロセッサによって実現されます。
CLI の代替としては、GUI ( Windowsなどのデスクトップ メタファーを含む)、テキスト ベースのメニュー( DOS シェルおよびIBM AIX SMITを含む)、およびキーボード ショートカットなどがあります。

グラフィカルユーザーインターフェースと比較して、コマンドラインインターフェースは実装に必要なシステムリソースが少なくて済みます。コマンドのオプションは各コマンドラインで数文字で指定できるため、経験豊富なユーザーにとってはオプションへのアクセスが容易です。行編集機能と、頻繁に使用するシーケンスを保存する履歴機能により、繰り返しタスクの自動化が容易になります。これは、パラメータや可変オプションを使用できるスクリプト言語にも適用できます。コマンドライン履歴を保存することで、コマンドの確認や繰り返し実行が可能になります。
コマンドラインシステムでは、ユーザーが参照するために紙のマニュアルやオンラインマニュアルが必要になる場合がありますが、多くの場合、ヘルプオプションによってコマンドのオプションが簡潔に説明されています。コマンドライン環境では、GUIにあるような異なるフォントや拡張編集ウィンドウといったグラフィカルな拡張機能が提供されない場合があります。新しいユーザーにとって、マニュアルを参照せずに利用可能なすべてのコマンドとオプションに慣れることは、グラフィカルユーザーインターフェースの アイコンやドロップダウンメニューと比べて難しい場合があります。
オペレーティングシステム(OS)のコマンドラインインターフェースは、通常、オペレーティングシステムに付属する独立したプログラムです。このようなテキストインターフェースを実装するプログラムは、コマンドラインインタープリタ、コマンドプロセッサ、またはシェルと呼ばれることがよくあります。
コマンドラインインタープリタの例には、Nushell、OpenVMSおよびRSX-11のDEC の DIGITAL Command Language (DCL) 、さまざまなUnix シェル( sh、ksh、csh、tcsh、zsh、Bashなど)、CP/MのCCP、DOSのCOMMAND.COM、およびOS/2と Windows のCMD.EXEプログラム (後者のグループは DEC の RSX-11 およびRSTS CLIに大きく基づいています) などがあります。[引用が必要]ほとんどのオペレーティングシステムでは、デフォルトのシェルプログラムを代替プログラムに置き換えることができます。例としては、DOS の4DOS 、OS/2 の4OS2、Windows の 4NT / Take Commandなどがあります。
シェルという用語はコマンドラインインタープリタを説明するときによく使用されますが、厳密に言えば、シェルはコマンドインタープリタとプロセッサであり、その延長として、コマンドインタープリタとプロセッサおよびオペレーティングシステムの幅広い機能に対するインタフェース (ユーザーインタフェース (コマンドラインインタフェース、GUI など) またはプログラミングインタフェース) を提供するプログラムです。たとえば、デフォルトの Windows GUI は、 WIN.INI 構成ファイルの SHELL=EXPLORER.EXE 行で定義されているEXPLORER.EXEという名前のシェル GUI です。このプログラムは厳密に言えばシェル GUI であり、その延長としてシェルです (厳密に言えば、Windows シェルは shell32.dll であり、shell32.dll のシェル GUI である explorer.exe ではありません)。ただし、これは CLI (コマンドラインインタープリタ) でもシェル CLI (シェルコマンドラインインタフェース) でもありません。

アプリケーション プログラム (オペレーティング システムとは対照的) にもコマンド ライン インターフェイスがある場合があります。
アプリケーション プログラムは、次の 3 つの主要なコマンド ライン インターフェイス メカニズムのいずれか、またはすべてをまったくサポートしない場合があります。
一部のアプリケーションはCLIをサポートしており、ユーザーに独自のプロンプトを表示し、コマンドラインを受け付けます。他のプログラムはCLIとGUIの両方をサポートしています。場合によっては、GUIは別のCLI実行可能ファイルを単にラップしたものに過ぎません。また、プログラムがGUIのオプションとしてCLIを提供する場合もあります。CLIとGUIは、多くの場合、異なる機能をサポートします。例えば、数値解析コンピュータプログラムであるMATLABのすべての機能はCLI経由で利用できますが、MATLAB GUIは機能のサブセットのみを提供します。
1975 年のColossal Cave Adventureでは、ユーザーは CLI を使用して 1 つまたは 2 つの単語を入力し、洞窟システムを探索します。
コマンドラインインターフェースは、テレプリンター(TTY)を介して人々が行っていた通信形態から発展しました。テレックスを用いて命令や確認を送信することもあった。初期のコンピュータシステムでは、オペレーターとのやり取りにテレプリンターがよく使用されていました。
機械式テレプリンターは、テレプリンターを模倣したキーボードと画面を備えた「ガラスTTY」に置き換えられました。 「スマート」端末は、画面全体でのカーソル移動や、端末上でローカルにデータを編集してコンピュータに送信するなどの追加機能を可能にしました。マイクロコンピュータ革命により、従来のミニコンピュータ+端末というタイムシェアリングアーキテクチャが置き換えられると、ハードウェア端末は端末エミュレータ (PCのシリアルポートを介して送信される端末信号を解釈するPCソフトウェア)に置き換えられました。これらは通常、組織の新しいPCと既存のミニコンピュータまたはメインフレームコンピュータとのインターフェースとして使用されたり、PC同士を接続したりするために使用されました。これらのPCの中には、電子掲示板システム(BBS)ソフトウェアを実行しているものもありました。
初期のオペレーティングシステムのCLIは常駐モニタプログラムの一部として実装されており、簡単に置き換えることはできませんでした。置き換え可能なコンポーネントとしてのシェルの最初の実装は、Multics タイムシェアリング オペレーティングシステムの一部でした。[4] 1964年、MITコンピューティングセンターのスタッフメンバーであるLouis Pouzinは、引数の置換を可能にしながらコマンドスクリプトを実行するためのRUNCOMツールを開発しました。[5] Pouzinは、プログラミング言語のようにコマンドを使用する手法を説明するためにシェルという用語を作り出し、 Multicsオペレーティングシステムでそのアイデアを実装する方法に関する論文を書きました。 [6] Pouzinは1965年に母国フランスに戻り、最初のMulticsシェルはGlenda Schroederによって開発されました。[5]

最初のUnixシェルであるV6シェルは、1971年にベル研究所のケン・トンプソンによって開発され、シュレーダーのMulticsシェルをモデルとしていました。[7] [8] Bourneシェルは、V6シェルの代替として1977年に導入されました。対話型コマンドインタープリタとして使用されていますが、スクリプト言語としても機能し、構造化プログラムを生成するために一般的に考えられている機能のほとんどを備えています。Bourneシェルは、KornShell(ksh)、Almquistシェル(ash)、そして人気のBourne-againシェル(Bash)の開発につながりました。[8]
初期のマイクロコンピュータ自体は、 CP/M、DOS、AppleSoft BASICなどのコマンドラインインターフェースをベースとしていました。1980年代から1990年代にかけて、Apple MacintoshとPC上のMicrosoft Windowsの登場により、コマンドラインインターフェースは主要なユーザーインターフェースとしてグラフィカルユーザーインターフェースに取って代わられました。[9]コマンドラインは代替ユーザーインターフェースとして引き続き利用可能であり、システム管理者やその他の上級ユーザーがシステム管理、コンピュータプログラミング、バッチ処理などによく使用しました。
2006年11月、MicrosoftはWindows PowerShell(旧コードネームMonad )バージョン1.0をリリースしました。これは、従来のUnixシェルの機能とMicrosoft独自のオブジェクト指向フレームワークである.NET Framework を組み合わせたものです。MinGWとCygwinは、 UnixライクなCLIを提供するWindows向けのオープンソースパッケージです。Microsoftは、Services for UNIXアドオン を通じて、 MKS Inc.のksh実装であるMKS Korn ShellをWindows向けに提供しています。
2001年以来、MacintoshオペレーティングシステムmacOSは、 Darwinと呼ばれるUnix系オペレーティングシステムをベースとしています。[10]これらのコンピュータでは、ユーザーは、アプリケーションフォルダのユーティリティサブフォルダにあるターミナルと呼ばれる端末エミュレータプログラムを実行するか、 sshを使用してマシンにリモートでログインすることで、Unix系コマンドラインインターフェイスにアクセスできます。ZシェルはmacOSのデフォルトシェルです。Bash、tcsh、KornShellも提供されています。macOS Catalinaより前は、Bashがデフォルトでした。
CLIは、膨大なコマンドやクエリの語彙と幅広い(または任意の)オプションを組み合わせ、純粋なGUIよりもテキストとしてより迅速に入力できる場合に使用されます。これは通常、オペレーティングシステムのコマンドシェルに当てはまります。CLIは、グラフィカルユーザーインターフェースをサポートするのに十分なリソースがないシステムでも使用されます。一部のコンピュータ言語システム(Python、[11] Forth、LISP、Rexx 、および多くのBASIC方言など)は、対話型のコマンドラインモードを提供し、コードの迅速な評価を可能にします。
CLIは、プログラマーやシステム管理者、エンジニアリングや科学分野の環境、そして技術的に高度なパーソナルコンピュータのユーザーによってよく使用されます。[12] CLIは、コマンドと応答を更新可能な点字ディスプレイを使用して表示できるため、視覚障害者の間でも人気があります。
コマンドラインの一般的なパターンは次のとおりです: [13] [14]
プロンプトコマンド パラメータ1 パラメータ2 パラメータ3 … パラメータN
この形式では、コマンドライン要素間の区切り文字は空白文字、行末の区切り文字は改行文字です。これは広く使用されている慣例ですが、普遍的ではありません。
CLI は一般に、構文とセマンティクスで構成されていると考えられます。構文は、すべてのコマンドが従うべき文法です。オペレーティング システムの場合、DOSとUnix はそれぞれ、すべてのコマンドが従うべき独自のルール セットを定義します。組み込みシステムの場合、 Nortel、Juniper Networks、Cisco Systemsなどの各ベンダーが独自のルール セットを定義します。これらのルールは、ユーザーがコマンド システム内をどのように操作するかも指示します。セマンティクスは、どのような種類の操作が可能か、どのような種類のデータに対してこれらの操作を実行できるか、そして文法がこれらの操作とデータをどのように表現するか (構文における記号的な意味) を定義します。
2 つの異なる CLI は構文またはセマンティクスのいずれかで一致する場合があります。ただし、両方で一致している場合にのみ、ユーザーが何も学習することなく両方の CLI を使用でき、スクリプトの再利用も可能になるほど十分に類似していると見なすことができます。
シンプルなCLIはプロンプトを表示し、ユーザーが入力したコマンドラインを受け取り、 Enterキーで終了すると、指定されたコマンドを実行し、結果またはエラーメッセージをテキストで表示します。高度なCLIは、指定されたコマンドを実行する前にコマンドラインを検証、解釈、パラメータ展開し、必要に応じて出力をキャプチャまたはリダイレクトします。
GUIのボタンやメニュー項目とは異なり、コマンドラインは通常自己文書化されており、[18]ユーザーが実行したいことを正確に述べています。さらに、コマンドラインには通常、結果をカスタマイズするために変更できる多くのデフォルトが含まれています。完全なコマンドを表す文字列またはエイリアスを割り当てることによって便利なコマンドラインを保存したり、複数のコマンドをグループ化して、プログラムのコンパイル、インストール、実行などのより複雑なシーケンスを実行するために、コマンドプロシージャまたはスクリプトと呼ばれる単一のエンティティを作成したりできます。このスクリプト自体もコマンドとして扱うことができます。これらの利点は、ユーザーが複雑なコマンドまたは一連のコマンドを一度理解するだけで済むことを意味します。コマンドを保存して、再利用できるためです。
CLI シェルに与えられるコマンドは、多くの場合、次のいずれかの形式になります。
doSomething how toFilesdoSomething how sourceFile destinationFiledoSomething how < inputFile > outputFiledoSomething how | doSomething how | doSomething how > outputFileここで、 doSomethingは事実上動詞、howは副詞(たとえば、コマンドは冗長に実行するか静かに実行するか)、toFilesはコマンドが作用するオブジェクト(通常は1つ以上のファイル)です。3>番目の例のはリダイレクト演算子で、コマンドラインインタープリタにコマンドの出力を自身の標準出力(画面)ではなく、指定されたファイルに送信するように指示します。これにより、ファイルは上書きされます。を使用すると、>>出力がリダイレクトされ、ファイルに追加されます。別のリダイレクト演算子は垂直バー(|)で、これは1つのコマンドの出力が次のコマンドの入力になるパイプラインを作成します。 [19]
Unix系システムやWindowsなどの一部のシステムでは、 PATH環境変数またはそれに相当する環境変数に指定するパスを変更することで、利用可能なコマンドセットを変更できます。Unix系システムでは、コマンドを実行可能ファイルとしてマークする必要もあります。パス変数内のディレクトリは、指定された順序で検索されます。パスの順序を変更することで、例えばデフォルトでは\OS2\E.EXEが\OS2\MDOS\E.EXEとして実行されている場合、実行可能ファイルの名前を\OS2\MDOS\E.EXEに変更することができます。実行可能ファイルの名前を変更することでも同様の効果があります。例えば、お気に入りのエディタの名前をEDITに変更する人はよくいます。
コマンドラインでは、高度な内部コマンドへのアクセスなど、利用可能なコマンドを制限することができます。Bourne ShellやBashなどの類似シェルは、制限付きシェルとして実行できます。これにより、ユーザーによるPATH環境変数の変更が禁止されます。つまり、PATHが許可されたコマンドのみを含むディレクトリのみを含むように設定されている場合、ユーザーはそれらのコマンドのみを実行できます。WindowsのCMD.EXEも、利用可能なコマンドの制限をサポートしています。多くの場合、シェアウェアプログラムは、プロンプトに「管理者によってバッチファイルの実行が無効にされています」というコマンドを表示するなど、コマンドの範囲を制限します。[説明が必要]
ネットワークルータなどの一部のCLIには、モードの階層構造があり、各モードでは異なるコマンドセットがサポートされます。コマンドセットは、セキュリティ、システム、インターフェースなどの関連ごとにグループ化されています。これらのシステムでは、ユーザーは一連のサブモードを経由する場合があります。例えば、CLIにインターフェースとシステムという2つのモードがある場合、ユーザーはインターフェースコマンドを使用してインターフェースモードに入ることができます。この時点では、ユーザーがインターフェースモードを終了してシステムモードに入るまで、システムモードのコマンドにアクセスできない場合があります。

コマンドプロンプト(または単にプロンプト)は、コマンドラインインターフェースにおいて、コマンドを受け付ける準備ができていることを示すために使用される(1つ以上の)文字のシーケンスです。文字通り、ユーザーに操作を促すものです。プロンプトは通常、、、、[20] [21] 、または [22] のいずれかの文字で終わり、$現在%の作業ディレクトリのパスやホスト名などの他の情報が含まれることがよくあります。
# :>-
多くのUnixおよび派生システムでは、ユーザーが通常のユーザーの場合、プロンプトは一般に$または で終わりますが、ユーザーがスーパーユーザー(Unix 用語では「root」) の場合、プロンプトは で終わります。
%#
エンドユーザーは多くの場合、プロンプトを変更できます。環境に応じて、色、特殊文字、その他の要素(現在時刻、ユーザー、シェル番号、作業ディレクトリを表す変数や関数など)を追加できます。例えば、プロンプトの表示内容をより分かりやすくしたり、見た目を美しくしたり、複数のマシン上のセッションを区別したり、コマンドのネストレベルを示すことができます。一部のシステムでは、プロンプト定義内の特殊トークンを使用することで、プロンプトを表示しながらコマンドラインインタープリタによって外部プログラムを呼び出すことができます。
DOS の COMMAND.COM および Windows NT のcmd.exeでは、ユーザーは コマンドを発行するか、対応する環境変数PROMPTの値を直接変更することで、プロンプトを変更できます。最近のほとんどのシステムのデフォルトであるスタイルは、たとえば で取得されます。古い DOS システムのデフォルトはだけで取得されますが、一部のシステムでは、フロッピー ドライブ A: または B: で使用されない限り、これによって新しいスタイルが生成されます。これらのシステムでは、 を使用して自動デフォルトをオーバーライドし、古いスタイルに明示的に切り替えることができます。
%PROMPT% C:\>PROMPT $P$GC>PROMPTC:\>PROMPT $N$G
多くのUnixシステムでは$PS1変数(プロンプト文字列1)が利用可能ですが[23] 、他の変数もプロンプトに影響を与える可能性があります(使用するシェルによって異なります)。Bashシェルでは、次のような形式のプロンプトが用いられます。
[時間] ユーザー@ホスト: work_dir $
コマンドを発行することで設定できる
エクスポートPS1 = '[\t] \u@\H: \W $'
zshでは、この変数は画面右側に表示される
$RPROMPTオプションのプロンプトを制御します。これは、テキスト入力の位置が変化しないため、実際のプロンプトではありません。プロンプトと同じ行に、右揃えで情報を表示するために使用されます。
RISC OSではコマンドプロンプトはシンボルなので、(OS) CLIコマンドはスターコマンド*と呼ばれることが多い。[24]また、コマンドの前に.を付けることで、他のコマンドライン( BBC BASICコマンドラインなど)から同じコマンドにアクセスすることもできる。
*

コマンドライン引数またはパラメータは、プログラムの起動時に提供される情報項目です。[25]プログラムには、情報のソースまたは宛先を識別したり、プログラムの動作を変更したりする多くのコマンドライン引数を設定できます。
コマンドプロセッサがアクティブな場合、プログラムは通常、プログラム名に続けてコマンドライン引数(存在する場合)を入力することで起動されます。例えば、UnixおよびUnix系環境では、コマンドライン引数の例は次のようになります。
rm ファイル.s
file.sは、 rmプログラムにという名前のファイルを削除するように指示するコマンドライン引数ですfile.s。
C、C++、Javaなどの一部のプログラミング言語では、プログラムがコマンドライン引数をメイン関数内で文字列パラメータとして扱うことで解釈することができます。[26] [27] Pythonなどの他の言語では、特にコマンドライン引数については、モジュールを通じてオペレーティングシステム固有のAPI(機能)を公開しています。
sys sys.argv
Unix 系オペレーティング システムでは、ファイル名の代わりに使用される単一のハイフンは、プログラムが標準入力からのデータを処理するか、標準出力にデータを送信するかを指定する特別な値です。
コマンドラインオプション、または単にオプション(フラグまたはスイッチとも呼ばれる)は、コマンドの動作を変更します。その効果はコマンドのプログラムによって決まります。オプションはコマンドライン上でコマンド名の後にスペースで区切って記述します。最初のオプションの前のスペースは必ずしも必要ではありません。例えば、 DOSのDir/?やは、 DIRコマンドの利用可能なオプションをリストするのとDIR /?同じ効果があります[22]dir --help 。一方、 (多くのUnixのバージョンでは)オプションの前に少なくとも1つのスペースが必要です(大文字と小文字は区別されます)。
オプションの形式はオペレーティングシステムによって大きく異なります。ほとんどの場合、構文はオペレーティングシステムの要件ではなく慣例によって定められています。コマンドライン全体はプログラムに渡される単なる文字列であり、インタープリタがコマンド名の終わりと引数およびオプションの始まりを判断できる限り、プログラマーはそれを任意の方法で処理できます。
いくつかの規則を説明するために、ディレクトリ内のファイルのリスト表示に関連するコマンドライン オプションの代表的なサンプルをいくつか示します。
Multicsでは、コマンドラインオプションとサブシステムキーワードを省略できます。この考え方は、短縮キーワード(例:STRINGRANGE を STRG 、DECLARE を DCL )を持つPL/I プログラミング言語に由来するようです。例えば、Multicsフォーラムサブシステムでは、-long_subjectパラメータを-lgsjと省略できます。Multics コマンドも省略形がよく使用され、通常は単語の頭文字をアンダースコアで繋げてコマンド名を形成します。例えば、delete_iacl_dirにdidを使用するなどです。
他のシステムでは、コマンド名の最初の文字の一部を一意に識別するのに十分な文字を許可するなど、省略形が自動的に使用されます (SUの省略形などSUPERUSER)。一方、特定の省略形が事前にプログラムされている (例: MDCOMMAND.COMの ) か、バッチ スクリプトやエイリアスMKDIRによってユーザーが定義する(例: tcsh ) システムもあります。
alias md mkdir
DOS、OS/2、Windowsでは、COMMAND.COMまたはCMD.EXE(または内部コマンド)から呼び出される異なるプログラムが、同じオペレーティングシステム内で異なる構文を使用する場合があります。例えば、次のようになります。
/、のいずれかで指定できます-。また、いずれか一方のみが許可される場合もあります。以下を参照してください。:または=) で実行される場合もあります。つまりProg -fFilename、Prog -f Filename、Prog -f:Filename、Prog -f=Filename。-fAと同じ意味になる場合もあれば、正しくない場合もあります。あるいは、有効ではあっても異なるパラメータである場合もあります。-f -ADOS、OS/2、Windowsでは、スラッシュ ( /) が最もよく使用されますが、ハイフンマイナスも時々使用されます。 DOS の多くのバージョン (MS-DOS/PC DOS 2.xx 以上、DR-DOS 5.0 以降のすべてのバージョン、PTS-DOS、Embedded DOS、FreeDOS、RxDOS )では、使用されるスイッチ文字( switcharまたはswitchcharと省略されることもある) は、システム コール( INT 21h /AX=3700h)から返される値によって定義されます。 この API によって返されるデフォルトの文字は です/が、上記のシステムではハイフンマイナスに変更できます。ただし、Datalight ROM-DOS および MS-DOS/PC DOS 5.0 以上では、常に/この呼び出しから戻ります (SwitChar 機能を再び有効にする多くのTSRの 1 つがロードされない限り)。これらのシステムの一部(MS-DOS/PC DOS 2.xx、DOS Plus 2.1、DR-DOS 7.02以上、PTS-DOS、Embedded DOS、FreeDOS、およびRxDOS)では、CONFIG.SYSのSWITCHARディレクティブで設定を事前構成することもできます。General SoftwareのEmbedded DOSは同じ目的でSWITCHコマンドを提供しており、4DOSでは を介して設定を変更できます。[28] DR-DOSでは、設定が から変更された場合、PROMPTパラメータの表示における最初のディレクトリ区切り文字がスラッシュ(DOS、FlexOS、4680 OS、4690 OS、OS/2、およびWindowsでも有効なディレクトリ区切り文字)に変わり、変更を示す視覚的な手がかりとなります。[22]また、現在の設定は組み込みのヘルプ画面にも反映されます。[22] DR-DOS COMMAND.COMの一部のバージョンでは、現在の設定を表示するためのPROMPTトークンもサポートされています。DR-DOS 7.02以降のCOMMAND.COMでは、移植可能なバッチジョブの作成を可能にするために、という名前の疑似環境変数も提供されています。 [29] [30]いくつかの外部DR-DOSコマンドでは、システム設定を上書きするための環境変数もサポートされています。
SETDOS /W:n/\$G/$/%/% %SWITCHAR%
しかし、多くのプログラムは、/コマンドライン引数を解析する前にスイッチ設定を取得するのではなく、 のみを使用するようにハードコードされています。ごく少数のプログラム(主にUnix系システムのポート)は、-スイッチ文字が設定されていなくても受け入れるようにプログラムされています(例えば、 Microsoft Windowsに付属のnetstatおよびは、利用可能なオプションを一覧表示する /? オプションを受け入れますが、その一覧には表記規則が指定されています)。
ping-
Unix系システムでは、オプションはASCIIのハイフンマイナスで始まります。新しい(そしてGNUの)慣例では、オプションの使用を識別するために2つのハイフンと1つの単語(例:--create)を使用しますが、古い慣例(頻繁に使用されるオプションとしてまだ利用可能)では、1つのハイフンと1つの文字(例:-c)を使用します。1つのハイフンの後に2つ以上の文字が続く場合は、2つのオプションが指定されていることを意味しているか、または2番目以降の文字が最初のオプションのパラメータ(ファイル名や日付など)であることを意味する場合があります。[31]
2つのハイフンマイナス記号(--)に続く文字がない場合、残りの引数をオプションとして扱わないことを示す場合があります。これは、ファイル名自体がハイフンで始まる場合や、追加の引数が内部コマンド(例:sudo)用である場合などに便利です。また、2つのハイフンマイナス記号は、より説明的なオプション名が使用される長いオプションの前に付けるために使用されることもあります。これはGNUソフトウェアの一般的な機能です。コマンドラインオプションの解析には、通常、 getopt関数とプログラム、およびgetoptsコマンドが使用されます。
Unix コマンド名、引数、およびオプションでは大文字と小文字が区別されます (ただし、主に他のオペレーティング システムの一般的なコマンドが Unix に移植されているいくつかの例を除きます)。
FlexOS、4680 OS、4690 OSを使用します-。
通常はCP/M[が使用されます。
会話型モニターシステム(CMS)は、コマンド末尾のオプションと他の引数を区切るために、単一の左括弧を使用します。例えば、次のコマンドでは、ターゲットファイルが存在する場合は置き換え、ソースファイルの日時をコピーに保持するオプションを指定しています。
COPY source file a target file b (REPLACE OLDDATE)
Data GeneralのRDOS、AOSなどのオペレーティング システムでの CLI、およびBusiness Basicに付属のバージョンの CLI では、/スイッチ文字として のみ が使用され、大文字と小文字が区別されず、一部の引数のローカル スイッチによって解釈方法を制御できます (マクロ アセンブラ コマンドにユーザー シンボルを追加するMAC/U LIB/S A B C $LPT/Lグローバル オプションがあるなどU)。ただし、2 つのローカル スイッチ (1 つはパス 2 でスキップする必要がある LIB を指定するスイッチ、もう 1 つはプリンタ $LPT にリストを直接送信するスイッチ) があります。
CLIに対する批判の1つは、利用可能なアクションに関する手がかりがユーザーに対して不足していることである。[引用が必要]対照的に、GUIは通常、メニュー、アイコン、またはその他の視覚的な手がかりによって、ユーザーに利用可能なアクションを通知する。[引用が必要]この制限を克服するために、多くのCLIプログラムは、通常、引数なしまたは、、、、、、、、、、、またはのいずれかで呼び出されたときに使用方法メッセージを表示する。[ 22 ] [32] [33]?-?-h-H/?/h/H/Help-help--help
ただし、使用方法のヘルプが表示されることを期待してパラメータなしでプログラム名を入力すると、コマンドライン引数がオプションであるプログラムやスクリプトがそれ以上の通知なしに実行されるため、危険となる可能性があります。
ヘルプパラメータとしては望ましいものの、プログラムは上記に例示したオプションの導入文字をすべてサポートするとは限りません。DOSでは、デフォルトのコマンドラインオプション文字を から に変更できるため/、プログラムは現在の設定を確認するためにSwitChar- APIに問い合わせる場合があります。そのため、プログラムがこれらすべてをサポートするようにハードワイヤードされていない場合、ユーザーはヘルプを確実に要求するためにも、現在の設定を知る必要があるかもしれません。SwitCharが に変更され、文字がDOSコマンドラインでも代替パス区切り文字として受け入れられる場合、プログラムはや などのオプションをヘルプパラメータではなくパスとして誤って解釈する可能性があります。[22]ただし、 が最初のパラメータまたは唯一のパラメータとして指定された場合、ほとんどのDOSプログラムは慣例により、現在のSwitChar設定に関係なく、それをヘルプ要求として受け入れます。[22] [28]-//h/H
プログラムによっては、異なるレベルのヘルプを選択できる場合があります。この機能をサポートするプログラムの中には、ヘルプパラメータ(/H:1、/H:2など)のオプション引数として詳細度を指定できるものや、ヘルプパラメータについては疑問符付きの簡潔なヘルプを表示し、その他のヘルプオプションについてはより詳細なヘルプ画面を表示するものもあります。[34]
プログラムによっては、受け入れられるパラメータに関する追加またはより具体的なヘルプは、ヘルプパラメータの引数として問題のパラメータを指定するか、その逆(/H:Wまたは/W:?(プログラムでサポートされている別のパラメータを想定/W))によって利用できる場合があります。[35] [36] [33] [32] [34] [注 1]
helpパラメータに似ていますが、あまり一般的ではないプログラムの中には、、、、などのaboutパラメータ付きで呼び出されると、自分自身に関する追加情報(モード、ステータス、バージョン、作成者、ライセンス、連絡先情報など)を提供するものもあります。-![ 32 ]/!-about--about
?および!文字は通常、コマンド ラインで他の目的にも使用される
ため、すべてのシナリオで使用できるとは限りません。したがって、対応するヘルプ情報にアクセスするための唯一のオプションとして使用しないでください。

プログラムの組み込みの内部ヘルプで提供されるものよりも詳細なヘルプが必要な場合、多くのシステムは、コマンド名を呼び出しパラメータとして受け入れ、外部ヘルプ システムを呼び出してくれる専用の外部「コマンド」(または同様のコマンド)をサポートしています。
help command
DR-DOSファミリーでは、COMMAND.COMプロンプトでコマンド自体の代わりに/?またはと入力すると、利用可能な内部コマンドの動的に生成されたリストが表示されます。 [22] 4DOSとNDOSは、プロンプトで と入力することで同じ機能をサポートしています[28](これはDR-DOS COMMAND.COMの新しいバージョンでも受け入れられます)。内部コマンドは を介して個別に無効にしたり、再度有効にしたりできます。[28]これに加えて、DR-DOS COMMAND.COMの新しいバージョンの一部では、利用可能な組み込み疑似環境変数のリストを表示するコマンドも受け入れます。クイックヘルプリファレンスとしての目的に加えて、これはバッチジョブで基礎となるコマンドラインプロセッサの機能を照会するために使用できます。[22]/H ?SETDOS /I?%
組み込みの使用法ヘルプやマニュアルページでは、有効なコマンド形式を説明するために短い構文が一般的に使用されています。[37] [38] [39] [注 2]
ping <hostname>mkdir [-p] <dirname>cp <source1> [source2…] <dest>netstat {-t|-u}これらの文字は、シェル内で直接使用した場合とは異なる意味を持つことに注意してください。パラメータ名とリテラル文字列を混同する可能性が低い場合は、山括弧を省略できます。
コンピューティングの多くの分野、特にコマンドラインでは、スペース文字が問題を引き起こす可能性があります。これは、スペース文字がコマンドまたはパラメータの一部として、あるいはパラメータまたは名前の区切りとして、異なる2つの機能を持ち、互いに互換性がないためです。曖昧さを防ぐには、ファイル名やディレクトリ名にスペース文字を最初から含めないようにする(例えば、アンダースコア _に置き換える)か、スペース文字を含む名前を引用符で囲むか、スペース文字の前にエスケープ文字(通常はバックスラッシュ)を使用するかのいずれかです\。例えば、
Long path/Long program name Parameter one Parameter two…曖昧です(プログラム名はプログラム名の一部ですか、それとも2つのパラメータですか?)ただし
Long_path/Long_program_name Parameter_one Parameter_two…、LongPath/LongProgramName ParameterOne ParameterTwo…、"Long path/Long program name" "Parameter one" "Parameter two"…そして
Long\ path/Long\ program\ name Parameter\ one Parameter\ two…曖昧ではありません。Unixベースのオペレーティングシステムでは、引用符の必要性を最小限に抑えるために、埋め込みスペースの使用を最小限に抑えています。Microsoft Windowsでは、埋め込みスペース(ディレクトリ名など)が一般的であるため、引用符を使用する必要があることがよくあります。
多くのユーザーはシェルを対話型のコマンドインタープリタと考えていますが、実際には各文がコマンドを実行するプログラミング言語です。コマンド実行における対話的な側面とプログラミング的な側面の両方を満たす必要があるため、シェルは設計だけでなく歴史によっても形作られた奇妙な言語です。
— ブライアン・W・カーニハン&ロブ・パイク[40]
コマンドラインインタープリタという用語は、ユーザーが入力したり、ファイルやその他のデータストリームから読み込んだりする一連のテキスト行を解釈するように設計されたコンピュータプログラムに適用されます。解釈のコンテキストは通常、特定のオペレーティングシステムまたはプログラミング言語のいずれかです。
コマンドラインインタープリタを使用すると、ユーザーは様々なコマンドを非常に効率的(かつ簡潔)に実行できます。ただし、そのためには、ユーザーはコマンド名とそのパラメータ、そしてインタープリタ処理される言語の構文を理解している必要があります。
Unixの#!メカニズムとOS/2のEXTPROCコマンドは、バッチファイルを外部プロセッサに渡すことを可能にします。これらのメカニズムを利用することで、特定の用途に特化したコマンドプロセッサを作成し、バッチファイル内に存在する外部データファイルを処理することができます。
OS/2プレゼンテーションマネージャや初期のMicrosoft Windowsなど、多くのグラフィカルインターフェースでは、コマンドラインを使用してヘルパープログラムを呼び出し、ドキュメントやプログラムを開きます。コマンドはグラフィカルシェル([説明が必要])、またはレジストリやOS/2 OS2USER.INIファイルなどのファイルに保存されます。


初期のコンピュータは対話型の入出力デバイスをサポートしておらず、コンピュータオペレータとの通信には多くの場合、センススイッチやランプに依存していました。これは、一度に1つのプログラムを実行するバッチシステム(多くの場合、プログラマがオペレータとして操作)には十分でした。また、ランプやスイッチを1つのマシン命令でテストおよび設定できるため、オーバーヘッドが低いという利点もありました。後に、オペレータがシステムと通信できるように、 単一のシステムコンソールが追加されました。
1960 年代以降、ユーザーとコンピューターのやり取りは主にコマンド ライン インターフェイスによって行われ、最初はTeletype Model 33 ASR などのマシンで行われ、その後VT52などの初期のCRTベースのコンピューター端末でも行われるようになりました。
これらのデバイスはすべてテキストベースで、グラフィックや画像を表示する機能はありませんでした。[nb 3]ビジネスアプリケーションプログラムではテキストベースのメニューが使用されていましたが、より一般的な対話にはコマンドラインがインターフェイスでした。
1964年頃、ルイ・プーザンは、互換性のあるタイムシェアリングシステム(CTSS)のより初期の、より単純な機能を基にして、Multicsにシェルの概念と名前を導入しました。[41] [より良い情報源が必要]
1970年代初頭から、Unixオペレーティングシステムは強力なコマンドライン環境の概念を採用し、あるコマンドの出力を別のコマンドの入力としてパイプする機能を導入しました。また、Unixには、コマンド文字列をシェルスクリプトとして保存し、カスタムコマンドのように再実行する機能もありました。
コマンドラインは、コモドールPET、Apple II、BBC Microといった初期の家庭用コンピュータの主要なインターフェースでもあり、ほとんどの場合、 BASICインタープリタ の形式で動作していました。CP /MやIBM PCといった後発のDOSコンピュータなど、より強力なビジネス向けマイクロコンピュータが登場すると、コマンドラインは出力のグロブやパイプといったUnixシェルの構文や機能の一部を取り入れるようになりました。
コマンドラインが初めて深刻な脅威にさらされたのは、1983年のApple Lisaと1984年のApple Macintoshで採用されたPARC GUIアプローチでした。GEOSやWindows 3.1などのGUIを採用したコンピュータユーザーも少数いましたが、 IBM PCユーザーの大多数は、 1995年にWindows 95がリリースされるまで、 COMMAND.COMシェルをGUIに置き換えることはありませんでした。[42] [43]
現在、ほとんどの非熟練コンピュータ ユーザーはほぼ GUI のみを使用していますが、上級ユーザーは強力なコマンド ライン環境にアクセスできます。
ほとんどのコマンドラインインタープリタは、様々な程度でスクリプトをサポートしています。結局のところ、コマンドラインインタープリタはインタープリタ型プログラミング言語のインタープリタですが、多くの場合、その言語は特定のコマンドラインインタープリタに固有のものです。インタープリタは、シェルスクリプトやバッチファイルなどと呼ばれる、解釈対象の言語で書かれたスクリプトを解釈します。一部のコマンドラインインタープリタは、独自の言語に加えて、 REXXなどの他の言語のインタープリタエンジンも組み込んでおり、それらの言語で書かれたスクリプトをコマンドラインインタープリタ内で直接実行できます。
逆に、スクリプトプログラミング言語、特にeval 関数を持つ言語(REXX、Perl、Python、Ruby、Jythonなど)は、コマンドラインインタープリタやフィルタの実装に使用できます。一部のオペレーティングシステム(特にDOS)では、このようなコマンドインタープリタは、標準装備のコマンドラインインターフェースよりも柔軟なインターフェースを提供します。また、言語のユーザーインターフェースや入出力機能を利用して、高度にカスタマイズされたユーザーインターフェースを提供することもできます。
コマンドラインは、プログラムとユーザー間のインターフェースを提供します。この意味で、コマンドラインはダイアログボックスの代替手段です。エディタやデータベースはコマンドラインを提供し、そこで代替コマンドプロセッサが実行される場合があります。一方、コマンドラインにオプションを指定すると、ダイアログボックスが開きます。「Take Command」の最新バージョンにはこの機能が搭載されています。DBaseはダイアログボックスを使用してコマンドラインを作成し、使用前にさらに編集することができました。
BASIC、diskpart、Edlin、QBASIC などのプログラムはすべてコマンドラインインターフェースを提供しており、その一部はシステムシェルを使用します。Basic は、8ビット Intel コンピュータのデフォルトインターフェースをモデルにしています。電卓は、コマンドラインまたはダイアログインターフェースとして実行できます。
Emacsはミニバッファという形でコマンドラインインターフェースを提供します。コマンドと引数はEmacsの標準テキスト編集機能を使って入力でき、出力は別のバッファに表示されます。
AdventureやKing's Quest 1-3など、ユーザーが画面下部にコマンドを入力するテキストモードゲームは数多く存在します。「指輪をゲット」や「見る」といったコマンドを入力することでキャラクターを操作します。プログラムは、キャラクターが指輪をどのように見ているかを説明するテキストを返したり、アクションを実行したりします。ダグラス・アダムスの同名小説を 原作としたインタラクティブフィクション作品であるテキスト アドベンチャー『銀河ヒッチハイク・ガイド』は、テレタイプ形式のコマンドラインゲームです。
これらのインターフェースの中で最も注目すべきは、標準ストリームインターフェースです。これにより、あるコマンドの出力を別のコマンドの入力に渡すことができます。テキストファイルも同様にどちらの目的にも使用できます。これは、パイプ、フィルタ、リダイレクトといったインターフェースを提供します。Unixではデバイスもファイルであるため、シェルでstdin、stdout、stderrとして使用される通常のファイル形式はttyデバイスファイルです。
もう一つのコマンドラインインターフェースは、シェルプログラムからヘルパープログラムを起動し、ドキュメントを起動したりプログラムを起動したりすることを可能にします。コマンドはシェル内部で処理され、その後別のプログラムに渡されてドキュメントを起動します。WindowsとOS/2のグラフィカルインターフェースは、コンソールまたはグラフィカルな他のプログラムに渡されるコマンドラインに大きく依存しており、これらのプログラムは通常、ユーザーコンソールを表示することなくコマンドラインを処理します。
OS/2 E エディターやその他の IBMエディターなどのプログラムは、通常はシェル用のコマンド ラインを処理でき、出力はドキュメント ウィンドウに直接配置されます。
ウェブブラウザのURL入力フィールドはコマンドラインとして使用できます。ウェブアプリの起動 、ブラウザ設定へのアクセス、検索の実行などに使用できます。「インターネットのコマンドライン」と呼ばれるGoogleは、既知の形式の検索パラメータを検出すると、ドメイン固有の検索を実行します。 [53]この機能は、検索がブラウザのフィールドから開始された場合でも、Googleのウェブサイトから開始された場合でも利用できます。
ブラウザ上でスタンドアロンのWebアプリとして、あるいはより大きなアプリケーションの一部としてコマンドラインアプリケーションを作成できるJavaScriptライブラリがあります。 [54]このようなWebサイトの例としては、 DuckDuckGoのCLIインターフェースがあります。[55]また、ブラウザからサーバーのコマンドラインインターフェースにアクセスできる WebベースのSSHアプリケーションもあります。
多くのPCビデオゲームには、コンソールと呼ばれるコマンドラインインターフェースが搭載されています。これは通常、ゲーム開発者が開発中に使用したり、MOD開発者がデバッグやチート、ゲームの一部をスキップするために使用したりするために使われます。
????nn??DD
カーネルと緊密に統合された「モニター」ではなく、交換可能な「コマンドシェル」という概念は、Multicsに起因すると考えられています。
{{cite book}}:|website=無視されました (ヘルプ)
シェルには、PS1、P52、P53、PS4という4つの異なるコマンドプロンプトがあります。PSはPrompt String(プロンプト文字列)の略です。
…] CPI /H […] CPI [@] [@] [/?|/Help[:topic]] [/!|/About] […] [?|&] […] /?, /Help このヘルプ画面またはトピックの特定のヘルプを表示します (+) […] /!, /About 「About」情報画面を表示します […] /Cpifile (+) .CPI/.CP ファイル名 <EGA.CPI>; 拡張子: <.CPI>; CPI.EXE=StdIn […] /Report レポートファイル名 <'
'=StdOut>; 拡張子: <.RPT> […] /Style (+) エクスポート <0>-6=BIN-raw/ROM/RAM/PSF0/1/SH/CHED; 7-12/13-18/19-24=ASM-hex/dec/bin/ip/il/p/l/mp/ml […] CPI /H:C […] コードページ ファイル パラメータの使用法の概要: […] CPI /H:S […] /Style パラメータの概要: […] ?, & オンライン編集モード (追加パラメータの入力を求めるプロンプト) […]
[…]
DR-DOS 7.03
DEBUG は
依然として古い SID86.EXE をベースにしているため、DEBUG 1.51 を実行し、デバッグプロンプトから ?? で拡張ヘルプシステムに入ることをお勧めします。これにより、構文と機能に関するヘルプが8画面表示されます。これらの機能の一部は、以前のバージョンでもサポートされていました。[…]
?と に関する包括的なヘルプを提供します??。)
IOSコマンドラインインターフェイス(CLI)は、主要なユーザーインターフェイスです…