

コマンドラインインターフェース( CLI ) は、コマンドラインシェルとも呼ばれ、[ 1 ] [ 2 ]コマンドを介してソフトウェアと対話する手段です。各コマンドはテキストの行としてフォーマットされます。テキストを介してコンピュータと対話するという概念は、20 年かけて進化し、物理的なハードウェアから高度なソフトウェアへと移行しました。CLI 以前は、コンピュータは物理的なスイッチやパンチカードを使用してプログラムされていました。[ 3 ]「コマンド」スタイルの対話への移行は、テレプリンタ (テレタイプ) の使用から始まりました。MIT の Whirlwind I (1951 年) のような初期のシステムは、タイプライターのような入力を使用して直接制御を開始し、カードの束をオペレーターに渡して結果を何時間も待つバッチ処理から脱却しました。[ 4 ] 1963 年に導入されたTeletype Model 33のようなデバイスでは、オペレーターがコマンドを入力してコンピュータから印刷された応答を受け取ることができました。[ 5 ]
コマンドラインインタープリタは、コンピュータが複数のユーザーを同時に処理できるほど強力になったとき、タイムシェアリングと呼ばれる技術によって登場しました。1961年にMITで開発された互換タイムシェアリングシステム(CTSS)は、最初の真のコマンドラインインタープリタを導入しました。これにより、ユーザーはLOGINやPRINTなどのコマンドを入力できるようになり、専用プログラム(スーパーバイザー)がそのテキストを解析して対応する関数を実行するようになりました。1964年、Louis Pouzinは、現在Multicsオペレーティングシステムの「シェル」として認識されているソフトウェアを導入し、スクリプトを実行するためのプログラム可能な環境を提供しました。多くのオペレーティングシステムやソフトウェア開発ユーティリティは、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タイムシェアリングオペレーティングシステムの一部でした。[ 6 ] 1964年、MIT計算センターのスタッフであるLouis Pouzinは、引数の置換を可能にしながらコマンドスクリプトを実行するRUNCOMツールを開発しました。 [ 7 ] Pouzinは、コマンドをプログラミング言語のように使用する手法を説明するために「シェル」という用語を作り出し、 Multicsオペレーティングシステムでそのアイデアを実装する方法について論文を書きました。[ 8 ] Pouzinは1965年に故郷のフランスに戻り、最初のMulticsシェルはGlenda Schroederによって開発されました。[ 7 ]

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

コマンドプロンプト(または単にプロンプト)は、コマンドラインインターフェイスで使用される(1 つ以上の)文字のシーケンスで、コマンドを受け入れる準備ができていることを示します。文字通り、ユーザーにアクションを実行するように促します。プロンプトは通常、文字$、%、#、[ 21 ] [ 22 ]:、>または[ 23 ]のいずれかで終わり、現在の作業ディレクトリのパスやホスト名などの他の情報が含まれることがよくあります。-
多くの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)[ 24 ]が使用されていますが、使用するシェルによっては他の変数もプロンプトに影響を与える場合があります。Bashシェルでは、プロンプトは次の形式になります。
[時間] user@host: work_dir $ コマンドを発行することで設定できます
export PS1 = '[\t] \u@\H: \W $'zshでは、この変数はディスプレイの右側に表示される$RPROMPTオプションのプロンプトを制御します。テキスト入力位置は変わらないため、厳密にはプロンプトではありません。プロンプトと同じ行に、右寄せで情報を表示するために使用されます。
RISC OSではコマンドプロンプトはシンボルであり、そのため(OS)CLIコマンドはしばしばスターコマンド*と呼ばれます。[ 25 ]また、コマンドの前にを付けることで、他のコマンドライン( BBC BASICコマンドラインなど)からも同じコマンドにアクセスできます。*
IBMのTSOでは、コマンドプロンプトは、READYプロンプト内の単語にちなんでREADYプロンプトと呼ばれています。
Bash、zsh、PowerShellなどの一部のシェルでは、コマンドプロンプトにリモート接続の種類、マシンセンサーの状態、バージョン管理システムに関する追加情報など、より多くの情報を表示するプロンプトシステムを使用できます。これらのシェルは、多くの場合、複数のANSIカラー、Unicode文字、および高度なシェル機能を使用して、カラフルな表示を実現します。

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

プログラムに組み込まれている内部ヘルプよりも詳細なヘルプが必要な場合、多くのシステムは専用の外部「コマンド」(または類似のもの)をサポートしており、これは呼び出しパラメータとしてコマンド名を受け取り、外部ヘルプシステムを呼び出します。helpcommand
DR-DOS ファミリーでは、コマンド自体の代わりにCOMMAND.COMプロンプトで/?またはと入力すると、使用可能な内部コマンドの動的に生成されたリストが表示されます。 [ 23 ] 4DOSおよびNDOS は、プロンプトで と入力することで同じ機能をサポートしています[ 30 ] (これは、 DR-DOS COMMAND.COM の新しいバージョンでも受け入れられます)。内部コマンドは、 を介して個別に無効化または有効化できます。[ 30 ]さらに、DR-DOS COMMAND.COM の新しいバージョンでは、使用可能な組み込みの擬似環境変数のリストを表示するコマンドも受け入れられます。これは、クイック ヘルプ リファレンスとしての目的の他に、バッチ ジョブで使用して、基盤となるコマンドライン プロセッサの機能を照会することもできます。[ 23 ]/H?SETDOS /I?%
組み込みの使用ヘルプやマニュアルページでは、有効なコマンド形式を説明するために一般的に短い構文が使用されています。[ 40 ] [ 41 ] [ 42 ] [ nb 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では、ディレクトリ名などに埋め込みスペースがよく使われるため、引用符を使用する必要があることがよくあります。
ほとんどのユーザーはシェルを対話型のコマンドインタープリタだと考えているが、実際には、各ステートメントがコマンドを実行するプログラミング言語である。コマンド実行における対話性とプログラミング性の両方を満たす必要があるため、シェルは歴史と設計の両方によって形作られた、独特な言語と言える。
コマンドラインインタープリタとは、ユーザーが入力したテキスト行、ファイルから読み込んだテキスト行、またはその他のデータストリームを解釈するように設計されたコンピュータプログラムを指します。解釈のコンテキストは通常、特定のオペレーティングシステムまたはプログラミング言語のコンテキストです。
コマンドラインインタープリタを使用すると、ユーザーはさまざまなコマンドを非常に効率的(かつ簡潔な場合が多い)に実行できます。そのためには、ユーザーはコマンド名とそのパラメータ、および解釈される言語の構文を知っている必要があります。
Unixの#!メカニズムとOS/2のEXTPROCコマンドは、バッチファイルを外部プロセッサに渡すことを容易にします。これらのメカニズムを利用することで、特定の用途向けに専用のコマンドプロセッサを作成し、バッチファイルに格納されている外部データファイルを処理することができます。
OS/2プレゼンテーションマネージャや初期のMicrosoft Windowsなど、多くのグラフィカルインターフェースは、コマンドラインを使用してヘルパープログラムを呼び出し、ドキュメントやプログラムを開きます。これらのコマンドは、グラフィカルシェル、レジストリ、またはOS/2 ファイルなどのファイルに格納されますOS2USER.INI。


初期のコンピュータは対話型の入出力装置をサポートしておらず、多くの場合、センサスイッチやランプを使ってコンピュータオペレーターと通信していました。これは、一度に1つのプログラムを実行するバッチシステムには十分であり、多くの場合、プログラマがオペレーターの役割を担っていました。また、ランプやスイッチは1つの機械語命令でテストおよび設定できるため、オーバーヘッドが低いという利点もありました。その後、オペレーターがシステムと通信できるように、単一のシステムコンソールが追加されました。
1960年代以降、コンピュータとのユーザーインタラクションは主にコマンドラインインターフェースを介して行われ、最初はテレタイプモデル33 ASRのようなマシンで、その後VT52のような初期のCRTベースのコンピュータ端末で行われた。
これらのデバイスはすべてテキストベースで、グラフィックや画像を表示する機能はありませんでした。[注3 ]ビジネスアプリケーションプログラムではテキストベースのメニューが使用されましたが、より一般的な対話ではコマンドラインがインターフェースでした。
1964年頃、ルイ・プーザンは、互換タイムシェアリングシステム(CTSS)のより単純な機能を基に、Multicsでシェルという概念と名前を導入した。[ 44 ]
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に置き換えませんでした。 [ 45 ] [ 46 ]
現在、ほとんどの非専門家のコンピュータユーザーはほぼ完全にGUIを使用しているが、より高度なユーザーは強力なコマンドライン環境を利用できる。
ほとんどのコマンドラインインタープリタは、程度の差こそあれスクリプトをサポートしています。結局のところ、それらはインタプリタ型プログラミング言語のインタプリタであり、多くの場合、その言語は特定のコマンドラインインタープリタ固有のものです。それらは、解釈対象の言語で書かれたスクリプト(シェルスクリプトやバッチファイルなどと呼ばれることもあります)を解釈します。一部のコマンドラインインタープリタは、独自の言語に加えて、REXXなどの他の言語のインタプリタエンジンも組み込んでおり、それらの言語で書かれたスクリプトをコマンドラインインタープリタ内で直接実行できるようにしています。
逆に、スクリプト言語、特にeval関数を持つ言語(REXX、 Perl、Python、Ruby、Jythonなど)は、コマンドラインインタープリタやフィルタの実装に利用できます。DOSをはじめとする一部のオペレーティングシステムでは、このようなコマンドインタープリタは、標準搭載のものよりも柔軟なコマンドラインインターフェースを提供します。また、他のシステムでは、言語のユーザーインターフェースと入出力機能を活用した、高度にカスタマイズされたユーザーインターフェースを提供することも可能です。
コマンドラインは、プログラムとユーザー間のインターフェースを提供します。この意味で、コマンドラインはダイアログボックスの代替手段と言えます。エディタやデータベースはコマンドラインを備えており、そこで代替コマンドプロセッサを実行できます。一方、コマンドラインにはオプションがあり、それを選択するとダイアログボックスが開きます。最新バージョンの「Take Command」にはこの機能があります。DBaseはダイアログボックスを使用してコマンドラインを構築し、使用前にさらに編集できるようにしていました。
BASIC、diskpart、Edlin、QBASICなどのプログラムはすべてコマンドラインインターフェースを提供しており、その一部はシステムシェルを使用します。BASICは、8ビットIntelコンピュータのデフォルトインターフェースをモデルにしています。電卓は、コマンドラインインターフェースまたはダイアログインターフェースとして実行できます。
Emacsはミニバッファという形でコマンドラインインターフェースを提供します。コマンドと引数はEmacsの標準的なテキスト編集機能を使って入力でき、出力は別のバッファに表示されます。
テキストモードのゲームには、 『アドベンチャー』や『キングズ・クエスト1-3』など、画面下部にユーザーがコマンドを入力する方式のものがいくつかあります。「get ring」や「look」などのコマンドを入力することでキャラクターを操作します。プログラムは、キャラクターがどのように見ているか、またはアクションを実行するかを説明するテキストを返します。テキストアドベンチャー『銀河ヒッチハイク・ガイド』は、ダグラス・アダムスの同名の小説を原作としたインタラクティブフィクションであり、テレタイプスタイルのコマンドラインゲームです。
これらのインターフェースの中で最も注目すべきは、あるコマンドの出力を別のコマンドの入力に渡すことができる標準ストリームインターフェースです。テキストファイルも同様の目的で使用できます。これにより、パイプ、フィルタ、リダイレクトのインターフェースが提供されます。Unixでは、デバイスもファイルであるため、標準入力、標準出力、標準エラーに使用されるシェルの通常のファイルタイプはttyデバイスファイルです。
もう一つのコマンドラインインターフェースでは、シェルプログラムがヘルパープログラムを起動して、ドキュメントを開いたり、プログラムを開始したりすることができます。コマンドはシェルによって内部的に処理され、その後、ドキュメントを起動する別のプログラムに渡されます。WindowsやOS/2のグラフィカルインターフェースは、 コンソールプログラムやグラフィカルプログラムなど、他のプログラムに渡されるコマンドラインに大きく依存しており、これらのプログラムは通常、ユーザーコンソールを表示することなくコマンドラインを処理します。
OS/2 Eエディタやその他のIBM製エディタなどのプログラムは、通常シェルで使用されるコマンドラインを処理することができ、その出力はドキュメントウィンドウに直接表示されます。
ウェブブラウザのURL入力フィールドはコマンドラインとして使用できます。ウェブアプリの起動 、ブラウザ設定へのアクセス、検索の実行などに使用できます。「インターネットのコマンドライン」と呼ばれるGoogleは、既知の形式の検索パラメータを検出すると、ドメイン固有の検索を実行します。 [ 55 ]この機能は、ブラウザフィールドからの検索でも、GoogleのWebサイトからの検索でも同様です。
JavaScriptライブラリの中には、開発者がブラウザ用のコマンドラインアプリケーションをスタンドアロンのWebアプリとして、またはより大きなアプリケーションの一部として作成するのに役立つものがあります。[ 56 ]このようなWebサイトの例としては、 DuckDuckGoのCLIインターフェースがあります。[ 57 ]また、ブラウザからサーバーのコマンドラインインターフェースにアクセスできるWebベースのSSHアプリケーションもあります。
多くのPCゲームには、コンソールと呼ばれるコマンドラインインターフェースが搭載されています。これは通常、ゲーム開発者が開発中に使用したり、MOD開発者がデバッグ目的、あるいはゲームの一部をスキップしたり、不正行為を行うために使用したりします。
????nn??DDカーネルに密接に統合された「モニタ」ではなく、交換可能な「コマンド シェル」を持つという概念は、Multics に起因すると考えられています。
シェルには、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 パラメータの概要: […] ?、& オンライン編集モード (追加のパラメータ入力を促します) […]
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)?と包括的なヘルプを提供します??。){{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)IOS コマンドラインインターフェイス (CLI) は、主要なユーザーインターフェイスです…