A command-line interface (CLI) processes command
s to a computer program in the form of lines of text. The program which handles the interface is called a command-line interpreter or command-line processor. Operating systems implement a command-line interface in a shell
for interactive access to operating system functions or services. Such access was primarily provided to users by computer terminal
s starting in the mid-1960s, and continued to be used throughout the 1970s and 1980s on VAX/VMS
systems and personal computer systems including DOS
and Apple DOS
Today, many users rely upon graphical user interface
s and menu-driven interactions. However, some programming and maintenance tasks may not have a graphical user interface and may still use a command line.
Alternatives to the command line interface include text-based user interface menus
(for example, IBM AIX SMIT
), keyboard shortcut
s, and various desktop metaphor
s centered on the pointer
(usually controlled with a mouse
). Examples of this include the Microsoft Windows, DOS Shell
, and Mouse Systems PowerPanel. Command-line interfaces are often implemented in terminal devices that are also capable of screen-oriented text-based user interfaces that use cursor addressing to place symbols on a display screen.
Programs with command-line interfaces are generally easier to automate via scripting
Many software systems implement command-line interfaces for control and operation. This includes programming environments and utility programs.
Comparison to graphical user interfaces
Compared with a graphical user interface, a command-line interface requires fewer system resources to implement. Since options to commands are given in a few characters in each command line, an experienced user may often find the options easier to access. Automation of repetitive tasks is simplified by line editing and history mechanisms for storing frequently used sequences; this may extend to a scripting language
that can take parameters and variable options. A command-line history can be kept, allowing review or repetition of commands.
A command-line system may require paper or online manuals for the user's reference, although often a "help" option provides a concise review of the options of a command. The command-line environment may not provide graphical enhancements such as different fonts
or extended edit windows
found in a GUI. It may be difficult for a new user to become familiar with all the commands and options available, compared with the icons
and drop-down menu
s of a graphical user interface, without repeated reference to manuals.
Operating system command-line interfaces
Operating system (OS) command-line interfaces are usually distinct programs supplied with the operating system. A program that implements such a text interface is often called a command-line interpreter, command processor or shell
Examples of command-line interpreters include DEC's DIGITAL Command Language
(DCL) in OpenVMS
, the various Unix shell
, etc.), CP/M
, as well as the OS/2
and the Windows CMD.EXE
programs, the latter groups being based heavily on DEC's RSX-11 and RSTS
CLIs. Under most operating systems, it is possible to replace the default shell program with alternatives; examples include 4DOS
for DOS, 4OS2
for OS/2, and 4NT / Take Command
Although the term 'shell' is often used to describe a command-line interpreter, strictly speaking, a 'shell' can be any program that constitutes the user-interface, including fully graphically oriented ones. For example, the default Windows GUI is a shell program named EXPLORER.EXE
, as defined in the SHELL=EXPLORER.EXE line in the WIN.INI configuration file. These programs are shells, but not CLIs.
Application command-line interfaces
Application programs (as opposed to operating systems) may also have command-line interfaces.
An application program may support none, any, or all of these three major types of command-line interface mechanisms:
* ''Parameters'': Most operating systems support a means to pass additional information to a program when it is launched. When a program is launched from an OS command-line shell, additional text provided along with the program name is passed to the launched program.
* ''Interactive command-line sessions'': After launch, a program may provide an operator with an independent means to enter commands in the form of text.
* ''Inter-process communication'': Most operating systems support means of inter-process communication
(for example, standard streams
or named pipe
s). Command lines from client processes may be redirected to a CLI program by one of these methods.
Some applications support only a CLI, presenting a CLI prompt to the user and acting upon command lines as they are entered. Other programs support both a CLI and a GUI. In some cases, a GUI is simply a wrapper
around a separate CLI executable file
. In other cases, a program may provide a CLI as an optional alternative to its GUI. CLIs and GUIs often support different functionality. For example, all features of MATLAB
, a numerical analysis
computer program, are available via the CLI, whereas the MATLAB GUI exposes only a subset of features.
The early Sierra games, such as the first three ''King's Quest
'' games (1984–1986), used commands from an internal command line to move the character around in the graphic window.
The command-line interface evolved from a form of dialog once conducted by humans over teleprinter
(TTY) machines, in which human operators remotely exchanged information, usually one line of text at a time. Early computer systems often used teleprinter machines as the means of interaction with a human operator. The computer became one end of the human-to-human teleprinter model. So instead of a human communicating with another human over a teleprinter, a human communicated with a computer.
The mechanical teleprinter was replaced by a "glass tty"
, a keyboard and screen emulating the teleprinter. "Smart" terminal
s permitted additional functions, such as cursor movement over the entire screen, or local editing of data on the terminal for transmission to the computer. As the microcomputer revolution
replaced the traditionalminicomputer + terminalstime sharing
architecture, hardware terminals were replaced by terminal emulator
s — PC software that interpreted terminal signals sent through the PC's serial port
s. These were typically used to interface an organization's new PC's with their existing mini- or mainframe computers, or to connect PC to PC. Some of these PCs were running Bulletin Board System
Early operating system CLIs were implemented as part of resident monitor
programs, and could not easily be replaced. The first implementation of the shell as a replaceable component was part of the Multics time-sharing operating system
In 1964, MIT Computation Center
staff member Louis Pouzin
developed the RUNCOM
tool for executing command scripts while allowing argument substitution.
Pouzin coined the term "shell
" to describe the technique of using commands like a programming language, and wrote a paper about how to implement the idea in the Multics
Pouzin returned to his native France in 1965, and the first Multics shell was developed by Glenda Schroeder
The first Unix shell
, the V6 shell
, was developed by Ken Thompson
in 1971 at Bell Labs
and was modeled after Schroeder's Multics shell.
The Bourne shell
was introduced in 1977 as a replacement for the V6 shell. Although it is used as an interactive command interpreter, it was also intended as a scripting language and contains most of the features that are commonly considered to produce structured programs. The Bourne shell led to the development of the KornShell
(ksh), Almquist shell
(ash), and the popular Bourne-again shell
Early microcomputers themselves were based on a command-line interface such as CP/M
or AppleSoft BASIC
. During the 1980s and 1990s, the introduction of the Apple Macintosh
and of Microsoft Windows
on PCs saw the command line interface as the primary user interface replaced by the Graphical User Interface
. The command line remained available as an alternative user interface, often used by system administrators
and other advanced users for system administration, computer programming
and batch processing
In November 2006, Microsoft
released version 1.0 of Windows PowerShell
(formerly codenamed ''Monad''), which combined features of traditional Unix shells with their proprietary object-oriented .NET Framework
packages for Windows that offer a Unix-like CLI. Microsoft provides MKS Inc.
implementation ''MKS Korn shell'' for Windows through their Services for UNIX
Since 2001, the Macintosh
operating system macOS
has been based on a Unix-like
operating system called Darwin
. On these computers, users can access a Unix-like command-line interface by running the terminal emulator
program called Terminal
, which is found in the Utilities sub-folder of the Applications folder, or by remotely logging into the machine using ssh
. Z shell
is the default shell for macOS; bash
, and the KornShell
are also provided. Before macOS Catalina
, bash was the default.
A CLI is used whenever a large vocabulary of commands or queries, coupled with a wide (or arbitrary) range of options, can be entered more rapidly as text than with a pure GUI. This is typically the case with operating system command shell
s. CLIs are also used by systems with insufficient resources to support a graphical user interface. Some computer language systems (such as Python
, and many dialects of BASIC
) provide an interactive command-line mode to allow for rapid evaluation of code.
CLIs are often used by programmers and system administrators, in engineering and scientific environments, and by technically advanced personal computer users. CLIs are also popular among people with visual disabilities since the commands and responses can be displayed using refreshable Braille display
Anatomy of a shell CLI
The general pattern of an OS command line interface
command param1 param2 param3 … paramN
— generated by the program to provide context for the client.
* Command — provided by the client. Commands are usually one of three classes:
*# ''Internal'' commands are recognized and processed by the command line interpreter itself and not dependent upon any external executable file.
*# ''Included'' commands run separate executable files generally considered part of the operating environment and always included with the OS.
*# ''External'' commands run executable files that are not part of the basic OS, but added by other parties for specific purposes and applications.
* param1 …paramN — Optional parameters provided by the client. The format and meaning of the parameters depends upon the command issued. In the case of Included or External commands, the values of the parameters are delivered to the program (specified by the Command) as it is launched by the OS. Parameters may be either Arguments
In this example, the delimiters between command-line elements are whitespace character
s and the end-of-line delimiter is the newline
delimiter. This is a widely used (but not universal) convention for command-line interfaces.
A CLI can generally be considered as consisting of syntax
. The ''syntax'' is the grammar that all commands must follow. In the case of operating system
each define their own set of rules that all commands must follow. In the case of embedded systems
, each vendor, such as Nortel
, Juniper Networks
or Cisco Systems
, defines their own proprietary set of rules that all commands within their CLI conform to. These rules also dictate how a user navigates through the system of commands. The ''semantics'' define what sort of operations are possible, on what sort of data these operations can be performed, and how the grammar represents these operations and data—the symbolic meaning in the syntax.
Two different CLIs may agree on either syntax or semantics, but it is only when they agree on both that they can be considered sufficiently similar to allow users to use both CLIs without needing to learn anything, as well as to enable re-use of scripts.
A simple CLI will display a prompt, accept a "command line" typed by the user terminated by the Enter key
, then execute the specified command and provide textual display of results or error messages. Advanced CLIs will validate, interpret and parameter-expand the command line before executing the specified command, and optionally capture or redirect its output.
Unlike a button or menu item in a GUI, a command line is typically self-documenting, stating exactly what the user wants done. In addition, command lines usually include many default
s that can be changed to customize the results. Useful command lines can be saved by assigning a character string
to represent the full command, or several commands can be grouped to perform a more complex sequence – for instance, compile the program, install it, and run it — creating a single entity, called a command procedure or script which itself can be treated as a command. These advantages mean that a user must figure out a complex command or series of commands only once, because they can be saved, to be used again.
The commands given to a CLI shell are often in one of the following forms:
where ''doSomething'' is, in effect, a verb
, ''how'' an adverb
(for example, should the command be executed "verbosely" or "quietly") and ''toFiles'' an object or objects (typically one or more files) on which the command should act. The
in the third example is a redirection operator
, telling the command-line interpreter to send the output of the command not to its own standard output (the screen) but to the named file. This will overwrite the file. Using
will redirect the output and append it to the file. Another redirection operator is the vertical bar
), which creates a pipeline
where the output of one command becomes the input to the next command.
CLI and resource protection
One can modify the set of available commands by modifying which paths appear in the PATH
environment variable. Under Unix, commands also need be marked as executable
files. The directories in the path variable are searched in the order they are given. By re-ordering the path, one can run e.g. \OS2\MDOS\E.EXE instead of \OS2\E.EXE, when the default is the opposite. Renaming of the executables also works: people often rename their favourite editor to EDIT, for example.
The command line allows one to restrict available commands, such as access to advanced internal commands. The Windows CMD.EXE
does this. Often, shareware programs will limit the range of commands, including printing a command 'your administrator has disabled running batch files' from the prompt.
Some CLIs, such as those in network router
s, have a hierarchy of mode
s, with a different set of commands supported in each mode. The set of commands are grouped by association with security, system, interface, etc. In these systems the user might traverse through a series of sub-modes. For example, if the CLI had two modes called ''interface'' and ''system'', the user might use the command ''interface'' to enter the interface mode. At this point, commands from the system mode may not be accessible until the user exits the interface mode and enters the system mode.
A command prompt (or just ''prompt'') is a sequence of (one or more) characters used in a command-line interface to indicate readiness to accept commands. It literally prompt
s the user to take action. A prompt usually ends with one of the characters
and often includes other information, such as the path of the current working directory
and the hostname
On many Unix
and derivative systems
, the prompt commonly ends in
if the user is a normal user, but in
if the user is a superuser
("root" in Unix terminology).
End-users can often modify prompts. Depending on the environment, they may include colors, special characters, and other elements (like variables and functions for the current time, user, shell number or working directory) in order, for instance, to make the prompt more informative or visually pleasing, to distinguish sessions on various machines, or to indicate the current level of nesting of commands. On some systems, special tokens in the definition of the prompt can be used to cause external programs to be called by the command-line interpreter while displaying the prompt.
In DOS' COMMAND.COM and in Windows NT's cmd.exe
users can modify the prompt by issuing a
command or by directly changing the value of the corresponding
%PROMPT% environment variable
. The default of most modern systems, the
style is obtained, for instance, with
. The default of older DOS systems,
is obtained by just
, although on some systems this produces the newer
style, unless used on floppy drives A: or B:; on those systems
can be used to override the automatic default and explicitly switch to the older style.
Many Unix systems feature the
variable (Prompt String 1),
although other variables also may affect the prompt (depending on the shell
used). In the bash
shell, a prompt of the form:
imeuser@host: work_dir $
could be set by issuing the command
export PS1='t\u@\H: \W $'
variable controls an optional "prompt" on the right-hand side of the display. It is not a real prompt in that the location of text entry does not change. It is used to display information on the same line as the prompt, but right-justified.
In RISC OS
the command prompt is a
symbol, and thus (OS)CLI commands are often referred to as "star commands".
One can also access the same commands from other command lines (such as the BBC BASIC
command line), by preceding the command with a
A command-line argument or parameter
is an item of information provided to a program when it is started. A program can have many command-line arguments that identify sources or destinations of information, or that alter the operation of the program.
When a command processor is active a program is typically invoked by typing its name followed by command-line arguments (if any). For example, in Unix
environments, an example of a command-line argument is:
"file.s" is a command-line argument which tells the program rm
to remove the file "file.s".
Some programming languages, such as C
, allow a program to interpret the command-line arguments by handling them as string parameters in the main function
. Other languages, such as Python
, expose operating system specific API
, and in particular
for "command-line arguments".
In Unix-like operating system
s, a single hyphen used in place of a file name is a special value specifying that a program should handle data coming from the standard input
or send data to the standard output
A command-line option or simply option (also known as a flag or switch) modifies the operation of a command; the effect is determined by the command's program. Options follow the command name on the command line, separated by spaces. A space before the first option is not always required, such as
in DOS, which have the same effect
of listing the DIR command's available options, whereas
(in many versions of Unix) ''does'' require the option to be preceded by at least one space (and is case-sensitive).
The format of options varies widely between operating systems. In most cases the syntax is by convention rather than an operating system requirement; the entire command line is simply a string passed to a program, which can process it in any way the programmer wants, so long as the interpreter can tell where the command name ends and its arguments and options begin.
A few representative samples of command-line options, all relating to listing files in a directory, to illustrate some conventions:
, command-line options and subsystem keywords may be abbreviated. This idea appears to derive from the PL/I programming language
, with its shortened keywords (e.g., STRG for STRINGRANGE and DCL for DECLARE). For example, in the Multics "forum" subsystem, the ''-long_subject'' parameter can be abbreviated ''-lgsj''. It is also common for Multics commands to be abbreviated, typically corresponding to the initial letters of the words that are strung together with underscores to form command names, such as the use of ''did'' for ''delete_iacl_dir''.
In some other systems abbreviations are automatic, such as permitting enough of the first characters of a command name to uniquely identify it (such as
as an abbreviation for
) while others may have some specific abbreviations pre-programmed (e.g.
in COMMAND.COM) or user-defined via batch scripts and aliases (e.g.
alias md mkdir
=Option conventions in DOS, Windows, OS/2
On DOS, OS/2 and Windows, different programs called from their COMMAND.COM or CMD.EXE (or internal their commands) may use different syntax within the same operating system. For example:
* Options may be indicated by either of the "switch characters":
, or either may be allowed. See below.
* They may or may not be case-sensitive
* Sometimes options and their arguments are run together, sometimes separated by whitespace, and sometimes by a character, typically
Prog -f Filename
* Some programs allow single-character options to be combined;
others do not. The switch
may mean the same as
or it may be incorrect, or it may even be a valid but different parameter.
, the forward slash (
) is most prevalent, although the hyphen-minus is also sometimes used. In many versions of DOS (MS-DOS/PC DOS 2.xx and higher, all versions of DR-DOS
since 5.0, as well as PTS-DOS
, Embedded DOS
) the switch character (sometimes abbreviated switchar or switchchar) to be used is defined by a value returned from a system call
/AX=3700h). The default character returned by this API is
, but can be changed to a hyphen-minus on the above-mentioned systems, except for under Datalight ROM-DOS and MS-DOS/PC DOS 5.0 and higher, which always return
from this call (unless one of many available TSR
s to reenable the SwitChar feature is loaded). In some of these systems (MS-DOS/PC DOS 2.xx, DOS Plus 2.1, DR-DOS 7.02 and higher, PTS-DOS, Embedded DOS, FreeDOS and RxDOS), the setting can also be pre-configured by a SWITCHAR
directive in CONFIG.SYS
. General Software's Embedded DOS provides a SWITCH command for the same purpose, whereas 4DOS
allows the setting to be changed via
Under DR-DOS, if the setting has been changed from
, the first directory separator
in the display of the PROMPT
will change to a forward slash
(which is also a valid directory separator in DOS, FlexOS, 4680 OS, 4690 OS, OS/2 and Windows) thereby serving as a visual clue to indicate the change.
Also, the current setting is reflected also in the built-in help screens.
Some versions of DR-DOS COMMAND.COM
also support a PROMPT token
to display the current setting. COMMAND.COM since DR-DOS 7.02 also provides a pseudo-environment variable
to allow portable batchjobs to be written.
Several external DR-DOS commands additionally support an environment variable
to override the system setting.
However, many programs are hardwired to use
only, rather than retrieving the switch setting before parsing command-line arguments. A very small number, mainly ports from Unix-like systems, are programmed to accept "-" even if the switch character is not set to it (for example
, supplied with Microsoft Windows
, will accept the /? option to list available options, and yet the list will specify the "-" convention).
=Option conventions in Unix-like systems
systems, the ASCII hyphen-minus
begins options; the new (and GNU
) convention is to use ''two'' hyphens then a word (e.g.
) to identify the option's use while the old convention (and still available as an option for frequently-used options) is to use one hyphen then one letter (e.g.,
); if one hyphen is followed by two or more letters it may mean two options are being specified, or it may mean the second and subsequent letters are a parameter (such as filename or date) for the first option.
Two hyphen-minus characters without following letters (
) may indicate that the remaining arguments should not be treated as options, which is useful for example if a file name itself begins with a hyphen, or if further arguments are meant for an inner command (e.g., sudo
). Double hyphen-minuses are also sometimes used to prefix "long options" where more descriptive option names are used. This is a common feature of GNU
software. The ''getopt
'' function and program, and the ''getopts
'' command are usually used for parsing command-line options.
Unix command names, arguments and options are case-sensitive (except in a few examples, mainly where popular commands from other operating systems have been ported to Unix).
=Option conventions in other systems
, 4680 OS
and 4690 OS
[[Conversational_Monitor_System_(CMS)_uses_a_single_[[Bracket#Parentheses_.28_.29.html" style="text-decoration: none;"class="mw-redirect" title="Conversational Monitor System">/nowiki>.
[[Conversational Monitor System (CMS) uses a single [[Bracket#Parentheses .28 .29">left parenthesis to separate options at the end of the command from the other arguments. For example, in the following command the options indicate that the target file should be replaced if it exists, and the date and time of the source file should be retained on the copy:
COPY source file a target file b (REPLACE OLDDATE
[[Data General]]'s CLI under their [[Data General RDOS|RDOS]], [[Data General AOS|AOS]], etc. operating systems, as well as the version of CLI that came with their [[Business Basic]], uses only
as the switch character, is case-insensitive, and allows "local switches" on some arguments to control the way they are interpreted, such as
MAC/U LIB/S A B C $LPT/L
has the global option "U" to the macro assembler command to append user symbols, but two local switches, one to specify LIB should be skipped on pass 2 and the other to direct listing to the printer, $LPT.
Built-in usage help
One of the criticisms of a CLI is the lack of cues to the user as to the available actions. In contrast, GUIs usually inform the user of available actions with menus, icons, or other visual cues. To overcome this limitation, many CLI programs display a brief summary of its valid parameters, typically when invoked with no arguments or one of
However, entering a program name without parameters in the hope that it will display usage help can be hazardous, as programs and scripts for which command line arguments are optional will execute without further notice.
Although desirable at least for the help parameter, programs may not support all option lead-in characters exemplified above.
Under DOS, where the default command-line option character
can be changed from
, programs may query the SwitChar
API in order to determine the current setting. So, if a program is not hardwired to support them all, a user may need to know the current setting even to be able to reliably request help.
If the SwitChar has been changed to
and therefore the
character is accepted as alternative path delimiter also at the DOS command line, programs may misinterpret options like
as paths rather than help parameters.
However, if given as first or only parameter, most DOS programs will, by convention, accept it as request for help regardless of the current SwitChar setting.
In some cases, different levels of help can be selected for a program. Some programs supporting this allow to give a verbosity level as an optional argument to the help parameter (as in
, etc.) or they give just a short help on help parameters with question mark and a longer help screen for the other help options.
Depending on the program, additional or more specific help on accepted parameters is sometimes available by either providing the parameter in question as an argument to the help parameter or vice versa (as in
would be another parameter supported by the program)).
In a similar fashion to the help parameter, but much less common, some programs provide additional information about themselves (like mode, status, version, author, license or contact information) when invoked with an "about" parameter like
characters typically also serve other purposes at the command line, they may not be available in all scenarios, therefore, they should not be the only options to access the corresponding help information.
If more detailed help is necessary than provided by a program's built-in internal help, many systems support a dedicated external "
" command (or similar), which accepts a command name as calling parameter and will invoke an external help system.
In the DR-DOS family, typing
at the COMMAND.COM
prompt instead of a command itself will display a dynamically generated list of available internal commands;
support the same feature by typing
at the prompt
(which is also accepted by newer versions of DR-DOS COMMAND.COM); internal commands can be individually disabled or reenabled via
In addition to this, some newer versions of DR-DOS COMMAND.COM also accept a
command to display a list of available built-in pseudo-environment variable
s. Besides their purpose as quick help reference this can be used in batchjobs to query the facilities of the underlying command-line processor.
Command description syntax
Built-in usage help and man page
s commonly employ a small syntax to describe the valid command form:
* angle brackets for ''required'' parameters:
* square brackets for ''optional'' parameters:
* ellipses for ''repeated'' items:
* vertical bars for ''choice'' of items:
Notice that these characters have different meanings than when used directly in the shell. Angle brackets may be omitted when confusing the parameter name with a literal string is not likely.
The space character
In many areas of computing, but particularly in the command line, the space character
can cause problems as it has two distinct and incompatible functions: as part of a command or parameter, or as a parameter or name separator
. Ambiguity can be prevented either by prohibiting embedded spaces in file and directory names in the first place (for example, by substituting them with underscores
), or by enclosing a name with embedded spaces between quote characters or using an escape character
before the space, usually a backslash
). For example
Long path/Long program name Parameter one Parameter two
is ambiguous (is "program name" part of the program name, or two parameters?); however
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
are not ambiguous. Unix
-based operating systems minimize the use of embedded spaces to minimize the need for quotes. In Microsoft Windows
, one often has to use quotes because embedded spaces (such as in directory names) are common.
The term command-line interpreter (CLI) is applied to computer program
s designed to interpret
a sequence of lines of text which may be entered by a user, read from a file
or another kind of data stream
. The context of interpretation is usually one of a given operating system
or programming language
Command-line interpreters allow users to issue various commands in a very efficient (and often terse) way. This requires the user to know the names of the commands and their parameters, and the syntax of the language
that is interpreted.
mechanism and OS/2 EXTPROC command facilitate the passing of batch files to external processors. One can use these mechanisms to write specific command processors for dedicated uses, and process external data files which reside in batch files.
Many graphical interfaces, such as the OS/2 Presentation Manager
and early versions of Microsoft Windows use command-lines to call helper programs to open documents and programs. The commands are stored in the graphical shell or in files like the registry or the OS/2
The earliest computers did not support interactive input/output devices, often relying on sense switch
es and lights to communicate with the computer operator
. This was adequate for batch
systems that ran one program at a time, often with the programmer acting as operator. This also had the advantage of low overhead, since lights and switches could be tested and set with one machine instruction. Later a single system console
was added to allow the operator to communicate with the system.
From the 1960s onwards, user interaction with computers was primarily by means of command-line interfaces, initially on machines like the Teletype Model 33
ASR, but then on early CRT
-based computer terminals
such as the VT52
All of these devices were purely text based, with no ability to display graphic or pictures.
For business application programs
, text-based menus
were used, but for more general interaction the command line was the interface.
Around 1964 Louis Pouzin
introduced the concept and the name ''shell'' in Multics
, building on earlier, simpler facilities in the Compatible Time-Sharing System
From the early 1970s the Unix
operating system adapted the concept of a powerful command-line environment, and introduced the ability to ''pipe
'' the output of one command in as input to another. Unix also had the capability to save and re-run strings of commands as "shell scripts
" which acted like custom commands.
The command-line was also the main interface for the early home computers such as the Commodore PET
, Apple II
and BBC Micro
– almost always in the form of a BASIC
interpreter. When more powerful business oriented microcomputers arrived with CP/M
and later DOS
computers such as the IBM PC
, the command-line began to borrow some of the syntax and features of the Unix shells such as globbing
The command-line was first seriously challenged by the PARC GUI
approach used in the 1983 Apple Lisa
and the 1984 Apple Macintosh
. A few computer users used GUIs such as GEOS
and Windows 3.1
but the majority of IBM PC
users did not replace their COMMAND.COM
shell with a GUI until Windows 95
was released in 1995.
Modern usage as an operating system shell
While most non-expert computer users now use a GUI almost exclusively, more advanced users have access to powerful command-line environments:
* The default VAX/VMS command shell, using the DCL
language, has been ported to Windows systems at least three times, including PC-DCL
and Acceler8 DCL Lite. Unix command shells have been ported to VMS and DOS/Windows 95 and Windows NT types of operating systems. COMMAND.COM and Windows NT cmd.exe have been ported to Windows CE and presumably works on Microsoft Windows NT Embedded 4.0
* Windows Resource Kit
and Windows Services for Unix
include Korn and the Bourne shells along with a Perl interpreter (Services of Unix contains Active State ActivePerl
in later versions and Interix
for versions 1 and 2 and a shell compiled by Microsoft)
* IBM OS/2 (and derivatives such as eComStation
) has the cmd.exe
processor. This copies the COMMAND.COM
commands, with extensions to REXX
* cmd.exe and COMMAND.COM are part of the Windows NT stream of operating systems.
* Yet another cmd.exe is a stripped-down shell for Windows CE
* An MS-DOS type interpreter called PocketDOS
has been ported to Windows CE machines; the most recent release is almost identical to MS-DOS 6.22 and can also run Windows 1, 2, and 3.0, QBasic
and other development tools, 4NT and 4DOS. The latest release includes several shells, namely MS-DOS 6.22, PC DOS 7, DR DOS 3.xx, and others.
* Windows users have a CLI environment named Windows Command Prompt
, which might use the CScript
interface to alternate programs. PowerShell
provides a command-line interface, but its applets are not written in Shell script
. Implementations of the Unix shell
are also available as part of the POSIX sub-system
, MKS Toolkit
, Hamilton C shell
and other software packages. Available shells for these interoperability tools include csh
and less commonly zsh
* COMMAND.COM (4DOS), Windows NT cmd.exe (4NT, TCC), and OS/2 cmd.exe (4OS2) and others based on them are enhanced shells which can be a replacement for the native shell or a means of enhancement of the default shell.
* Implementations of PHP
have a shell for interactive use called php-cli.
* Standard Tcl/Tk
has two interactive shells, Tclsh and Wish, the latter being the GUI version.
, and other interpreters also have command shells for interactive use.
as its default interactive shell for the superuser
, and ash
as default scripting shell.
* Many Linux distribution
s have the Bash
implementation of the Unix shell
and some Linux distributions use zsh
. Previously, macOS used tcsh
* Embedded Linux
(and other embedded Unix-like
) devices often use the Ash
implementation of the Unix shell, as part of Busybox
uses the mksh
which replaces a shell derived from ash
that was used in older Android versions, supplemented with commands from the separate ''toolbox''
* Routers with Cisco IOS
and many others are commonly configured from the command line.
Most command-line interpreters support scripting
, to various extents. (They are, after all, interpreters of an interpreted programming language
, albeit in many cases the language is unique to the particular command-line interpreter.) They will interpret scripts (variously termed shell script
s or batch file
s) written in the language
that they interpret. Some command-line interpreters also incorporate the interpreter engines of other languages, such as REXX
, in addition to their own, allowing the executing of scripts, in those languages, directly within the command-line interpreter itself.
Conversely, scripting programming language
s, in particular those with an eval function
(such as REXX, Perl
), can be used to implement command-line interpreters and filters. For a few operating system
s, most notably DOS
, such a command interpreter provides a more flexible command-line interface than the one supplied. In other cases, such a command interpreter can present a highly customised user interface employing the user interface and input/output facilities of the language.
Other command-line interfaces
The command line provides an interface between programs as well as the user. In this sense, a command line is an alternative to a dialog box
. Editors and databases present a command line, in which alternate command processors might run. On the other hand, one might have options on the command line, which opens a dialog box. The latest version of 'Take Command' has this feature. DBase used a dialog box to construct command lines, which could be further edited before use.
Programs like BASIC, diskpart
, and QBASIC all provide command-line interfaces, some of which use the system shell. Basic is modeled on the default interface for 8-bit Intel computers. Calculators can be run as command-line or dialog interfaces.
provides a command-line interface in the form of its minibuffer. Commands and arguments can be entered using Emacs standard text editing support, and output is displayed in another buffer.
There are a number of text mode games, like ''Adventure
'' or ''King's Quest 1-3
'', which relied on the user typing commands at the bottom of the screen. One controls the character by typing commands like 'get ring' or 'look'. The program returns a text which describes how the character sees it, or makes the action happen. The text adventure
''The Hitchhiker's Guide to the Galaxy
'', a piece of interactive fiction
based on Douglas Adam's
book of the same name, is a teletype-style command-line game.
The most notable of these interfaces is the standard streams
interface, which allows the output of one command to be passed to the input of another. Text files can serve either purpose as well. This provides the interfaces of piping, filters and redirection. Under Unix, devices are files
too, so the normal type of file for the shell used for stdin,stdout and stderr is a tty
Another command-line interface allows a shell program to launch helper programs, either to launch documents or start a program. The command is processed internally by the shell, and then passed on to another program to launch the document. The graphical interface of Windows and OS/2 rely heavily on command-lines passed through to other programs – console or graphical, which then usually process the command line without presenting a user-console.
Programs like the OS/2 E editor
and some other IBM editors
, can process command-lines normally meant for the shell, the output being placed directly in the document window.
A web browser's URL input field can be used as a command line. It can be used to "launch" web app
s, access browser configuration
, as well as perform a search. Google
, which has been called "the command line of the internet" will perform a domain-specific search when it detects search parameters in a known format.
This functionality is present whether the search is triggered from a browser field or on Google's website.
Many video games
on the PC feature a command line interface often referred to as a console. It is typically used by the game developers during development and by mod developers for debugging purposes as well as for cheating or skipping parts of the game.
* Comparison of command shells
* List of command-line interpreters
* Batch processing
* Batch file
* Console application
* Interpreter directive
* Read-eval-print loop
* Shell (computing)
* Scripting language
* Shell script
* Computer terminal
* Terminal emulator
* Run command
* In the Beginning… Was the Command Line
The Roots of DOS
David Hunter, ''Softalk for the IBM Personal Computer'' March 1983. Archived at Patersontech.com sinc
Microsoft TechNet Database "Command-Line Reference"
Category:History of human–computer interaction
Category:User interface techniques