Comparison of command shells
Template:Short description Script error: No such module "labelled list hatnote". Template:More citations needed Template:Use dmy dates
This article catalogs comparable aspects of notable operating system shells.
General characteristics
Template:Sticky header Template:Sort-under
| Shell | Usual environmentScript error: No such module "Check for unknown parameters". |
Usually invokedScript error: No such module "Check for unknown parameters". |
IntroducedScript error: No such module "Check for unknown parameters". | Platform-independentScript error: No such module "Check for unknown parameters". | Default login shell inScript error: No such module "Check for unknown parameters". | Default script shell inScript error: No such module "Check for unknown parameters". | LicenseScript error: No such module "Check for unknown parameters". | Source code availabilityScript error: No such module "Check for unknown parameters". | User interfaceScript error: No such module "Check for unknown parameters". |
Mouse supportScript error: No such module "Check for unknown parameters". |
Unicode supportScript error: No such module "Check for unknown parameters". |
ISO 8601 supportScript error: No such module "Check for unknown parameters". |
Console redirectionScript error: No such module "Check for unknown parameters". | Stream redirectionScript error: No such module "Check for unknown parameters". | ConfigurabilityScript error: No such module "Check for unknown parameters". | Startup/shutdown scriptsScript error: No such module "Check for unknown parameters". | Batch scriptsScript error: No such module "Check for unknown parameters". | LoggingScript error: No such module "Check for unknown parameters". | Available as statically linked, independent single file executableScript error: No such module "Check for unknown parameters". |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Thompson shell | UNIX | sh | 1971 | Template:N/A | UNIX | UNIX | Template:N/A | Yes | Text-based CLI | No | No | Template:N/A | Yes | Template:N/A | Template:N/A | Template:N/A | Template:N/A | Template:N/A | Template:N/A |
| Bourne shell 1977 version | 7th Ed. UNIX | sh | 1977 | Yes[1] | 7th Ed. UNIX | 7th Ed. UNIX, | Template:Proprietary | Yes | Text-based CLI | No | No | Template:N/A | Yes | Yes (Template:Citation needed span)Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
No | Yes |
| Bourne shell current version | Various UNIX | sh | 1977 | Yes[2] | SunOS-5.x, FreeBSD[3] | SunOS-5.x | CDDL[4]Template:Better source needed | Yes | Text-based CLI | No | Yes[nb 1]Template:Better source needed | Template:N/A | Yes | Yes (Template:Citation needed span)Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes[nb 2] | Yes |
| POSIX shell[5] | POSIX | sh | 1992[6] | Template:N/A | Template:N/A | POSIX | Template:N/A | Template:N/A | Text-based CLI | No | Yes if used by configured localeScript error: No such module "Check for unknown parameters". |
Template:N/A | Yes | Yes (Template:Citation needed span)Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Unspecified (Template:Mono given as an example) |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes | Template:N/A |
| bash (v4) | POSIX | bash, sh | 1989[7] | Yes | GNU, Linux (default for root), macOS 10.3–10.14 | GNU, Linux, Haiku, macOS 10.3–10.14 | GPL | Yes | Text-based CLI | No | Yes[8]Template:Better source needed | Yes (Template:Mono builtin)Script error: No such module "Check for unknown parameters". |
Yes | Yes (Template:Citation needed span)Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes | Yes |
| csh | POSIX | csh | 1978 | Yes | SunOS | ? | BSD | Yes | Text-based CLI | No | No | ? | Yes | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes | Yes |
| tcsh | POSIX | tcsh, csh | 1983[9] | Yes | FreeBSD (former default for root),[10] formerly Mac OS X | ? | BSD | Yes | Text-based CLI | No | Yes | ? | Yes | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes | Yes |
| Hamilton C shell | Win32, OS/2 | csh | 1988[11] | Yes (OS/2 version no longer maintained)Script error: No such module "Check for unknown parameters". |
Optional | Optional | Template:Proprietary | No | Text-based CLI | No | No | Yes (-t timestamp operator)Script error: No such module "Check for unknown parameters". |
Yes | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (via login.csh, startup.csh and logout.csh)Script error: No such module "Check for unknown parameters". |
Yes (command line option)Script error: No such module "Check for unknown parameters". |
Yes | Yes |
| Scsh | POSIX | scsh | 1994 | Yes | ? | ? | BSD-style | Yes | ? | ? | ? | ? | ? | Yes | ? | ? | ? | ? | Yes |
| ksh (ksh93t+) | POSIX | ksh | 1983[12][13] | Yes | AIX, HP-UX | OpenSolaris | Common Public License | Yes | Text-based CLI | No | Yes | Yes (Template:Mono builtin with Template:Mono[14])Script error: No such module "Check for unknown parameters". |
Yes | Yes (Template:Mono up to 9)[14]Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (system and user's Template:Mono and Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes | Yes |
| pdksh | POSIX | ksh, sh | 1989? | Yes | OpenBSD[15] | OpenBSD[15] | Public domain | Yes | Text-based CLI | No | No | Template:N/A | Yes | Yes (Template:Citation needed span)Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes | Yes |
| zsh | POSIX | zsh | 1990 | Yes | Deepin, GoboLinux, Grml, macOS 10.15+, Kali 2020.4+ | Grml, macOS 10.15+ | MIT-style | Yes | Text-based CLI | Yes via additional code[16]Script error: No such module "Check for unknown parameters". |
Yes | Yes (various internal features involving the date, by using the Template:Mono Template:Mono format[17] and the Template:Mono option for the Template:Mono builtin[18])Script error: No such module "Check for unknown parameters". |
Yes | Yes (Template:Mono up to 9)[19]Script error: No such module "Check for unknown parameters". |
Yes (via variables, options, functions, styles, etc.)Script error: No such module "Check for unknown parameters". |
Yes (system and user's Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes | Yes |
| ash | POSIX | sh | 1989 | Yes | Minix, BusyBox based systems | NetBSD, Minix, BusyBox based systems | BSD-style | Yes | Text-based CLI | No | Partial (for BusyBox, supported in command-line editing, but not in string handling[20])Script error: No such module "Check for unknown parameters". |
Template:N/A | Yes | Yes (Template:Citation needed span)Script error: No such module "Check for unknown parameters". |
Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes | Yes |
| CCP | CP/M, MP/M | (CCP) | 1976 (1974) | No | CP/M (no login), MP/M | CP/M, MP/M | Template:Proprietary | Yes (originally closed-source) | Text-based CLI | No | No | No | No | No | No | Yes (automatic via Template:Mono) | Partial (only via external Template:Mono command to update Template:Mono)Script error: No such module "Check for unknown parameters". |
No | Yes |
| COMMAND.COM | DOS | COMMAND | 1980 | No (3rd party implementations, not bound to a specific DOS vendor or version, available)Script error: No such module "Check for unknown parameters". |
DOS, Windows 95, 98, SE, ME | DOS, Windows 95, 98, SE, ME | vendor specific, f.e. MS-EULA,[nb 3] or BSD/GPL (free clones) | No (except for OpenDOS, DR-DOS, PTS/DOS and FreeDOS) | Text-based CLI | No | No | No (except for DR-DOS) | Yes (via Template:Mono or Template:Mono) | Yes (Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (via startup parameters and environment variables, DR-DOS also supports Template:Mono user-default switch command) | Yes (automatic Template:Mono for primary shell, or explicitly via Template:Mono, Template:Mono or Template:Mono startup options) | Yes (via Template:Mono command or Template:Mono and Template:Mono startup options) | No | Yes |
| OS/2 CMD.EXE | OS/2, eComStation, ArcaOS | CMD | 1987 | No | OS/2, eComStation, ArcaOS | OS/2, eComStation, ArcaOS | Template:Proprietary[nb 4] | No | Text-based CLI | No | No | No | No | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
? | Partial (only via Template:Mono startup option) | Yes (via Template:Mono command or Template:Mono and Template:Mono startup options) | No | Yes |
| Windows CMD.EXE[nb 5] | Win32 | CMD | 1993 | No | Windows NT, 2000, XP, Server 2003, Vista | Windows NT, 2000, XP, Server 2003, Vista | Template:Proprietary[nb 6] | No | Text-based CLI | No | Partial (Template:Mono for UTF-8, but program arguments are still encoded in local codepage) | No | No | Yes | Yes (via registry, startup parameters, and environment variables) | Yes (automatic via registry, or explicitly via Template:Mono startup option) | Yes (via Template:Mono command or Template:Mono and Template:Mono startup options) | No | Yes |
| 4DOS, NDOS | DOS, Windows 95, 98, SE, ME | 4DOS, NDOS | 1989 (1986) | No (not bound to a specific OS vendor or version)Script error: No such module "Check for unknown parameters". |
Optional | Optional | MIT License, with restrictions | Yes | Text-based CLI with TUI extensions | Yes (popups, help system, Template:Mono internal variable, Template:Mono command) | No | Yes | Yes (via Template:Mono, except for Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono commands and file / directory coloring) | Yes (Template:Mono, Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono/Template:Mono file, startup parameters, environment variables, Template:Mono command) | Yes (automatic Template:Mono for primary shell and Template:Mono/Template:Mono as well as Template:Mono/Template:Mono for any shell, or explicitly via Template:Mono, Template:Mono or Template:Mono startup options) | Yes (via Template:Mono command or Template:Mono and Template:Mono startup options) | Yes | Yes |
| 4OS2 | OS/2, eComStation, ArcaOS | 4OS2 | 1992 | No (not bound to specific OS/2 versions)Script error: No such module "Check for unknown parameters". |
Optional (but bundled with ArcaOS) | Optional | Template:Proprietary | Yes | Text-based CLI | No | No | No | No | Yes (Template:Mono, Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono file, startup parameters, environment variables, Template:Mono command) | Yes (automatic via Template:Mono/Template:Mono as well as Template:Mono/Template:Mono files, or explicitly via Template:Mono option) | Yes (via Template:Mono command or Template:Mono and Template:Mono startup options) | Yes | ? |
| TCC (formerly 4NT) |
Win32 | TCC | 1993 | No (not bound to specific NT versions)Script error: No such module "Check for unknown parameters". |
optional | optional | Template:Proprietary | No | Text-based CLI (Take Command: GUI) | Yes (console mouse, popups, help system, Template:Mono, Template:Mono internal variables, Template:Mono command)Script error: No such module "Check for unknown parameters". |
Yes | Yes | No | Yes (Template:Mono, Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (via registry, Template:Mono/Template:Mono file, startup parameters, environment variables, Template:Mono command)Script error: No such module "Check for unknown parameters". |
Yes (automatic via registry and Template:Mono/Template:Mono as well as Template:Mono/Template:Mono, or explicitly via Template:Mono startup option)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono command or Template:Mono and Template:Mono startup options)Script error: No such module "Check for unknown parameters". |
Yes | No |
| VMS DCL[21] | OpenVMS | Automatically for login/interactive processScript error: No such module "Check for unknown parameters". | 1977? | Yes | VMS | VMS | Proprietary, bundled in VMS | by special license only | Text-based CLI | with DECwindows/Motif | Yes | Yes, at least to 1988 standard | Yes | Yes (Template:Mono, Template:Mono assignment)Script error: No such module "Check for unknown parameters". |
Yes (via symbols, logical names, and options)Script error: No such module "Check for unknown parameters". |
Yes (SYS$MANAGER:SYLOGIN.COM and user defined LOGIN.COM)Script error: No such module "Check for unknown parameters". |
Yes | Yes | No |
| PowerShell | .NET, .NET Framework |
PowerShell | 2006 | Yes | Windows 10, 8, Server 2008, 7[nb 7] | Windows 10, 8, Server 2008, 7 | MIT-style | Yes | Graphical CLI | Yes | Yes | Yes | Yes | Yes | Yes (via variables and options)Script error: No such module "Check for unknown parameters". |
Yes (%USERPROFILE%\Documents \WindowsPowerShell\Microsoft.PowerShell_profile.ps1)Script error: No such module "Check for unknown parameters". |
Yes (PowerShell feature)Script error: No such module "Check for unknown parameters". |
Yes | No |
| rc | Plan 9, POSIX | rc | 1989 | Yes | Plan 9, Version 10 Unix | Plan 9, Version 10 Unix | MIT License[22] | Yes | Text-based CLI | ? | Yes | Yes | ? | Yes | Yes (via options)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes | ? | Yes |
| BeanShell | Java | ? | 2005 | Yes | ? | ? | LGPL | ? | ? | ? | Yes | ? | ? | Yes | ? | ? | ? | ? | No |
| fish | POSIX | fish | 2005[23] | Yes | GhostBSD | ? | GPL | Yes | Text-based CLI | ? | Yes | ? | ? | Yes (Template:Citation needed span)Script error: No such module "Check for unknown parameters". |
Yes (through environment variables and via web interface through Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono and Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (Unix feature)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
? |
| Ion | Redox, Linux | ion | 2015[24] | Yes | Redox | Redox | MIT | Yes | Text-based CLI | ? | Yes | Yes | ? | Yes (Template:Citation needed span)Script error: No such module "Check for unknown parameters". |
Yes (follows the XDG Base Directory spec)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes | Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
Partial (not distributed as a standalone executable, but it can be built as one) |
| Shell | Usual environment | Usually invoked | Introduced | Platform-independent | Default login shell in | Default script shell in | License | Source code availability | User interface | Mouse support | Unicode support | ISO 8601 support | Console redirection | Stream redirection | Configurability | Startup/shutdown scripts | Batch scripts | Logging | Available as statically linked, independent single file executable |
Interactive features
Template:Sticky header Template:Sort-under
| Shell | Command name completionScript error: No such module "Check for unknown parameters". |
Path completionScript error: No such module "Check for unknown parameters". |
Command argument completionScript error: No such module "Check for unknown parameters". |
Wildcard completionScript error: No such module "Check for unknown parameters". |
Command historyScript error: No such module "Check for unknown parameters". |
Mandatory argument promptScript error: No such module "Check for unknown parameters". |
Automatic suggestionsScript error: No such module "Check for unknown parameters". |
Colored directory listingsScript error: No such module "Check for unknown parameters". |
Text highlightingScript error: No such module "Check for unknown parameters". |
Syntax highlightingScript error: No such module "Check for unknown parameters". |
Directory history, stack or similar featuresScript error: No such module "Check for unknown parameters". | Implicit directory changeScript error: No such module "Check for unknown parameters". |
AutocorrectionScript error: No such module "Check for unknown parameters". | Integrated environmentScript error: No such module "Check for unknown parameters". |
SnippetsScript error: No such module "Check for unknown parameters". | Value promptScript error: No such module "Check for unknown parameters". |
Menu/options promptScript error: No such module "Check for unknown parameters". |
Progress indicatorScript error: No such module "Check for unknown parameters". |
Context sensitive helpScript error: No such module "Check for unknown parameters". |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Thompson shell | No | No | No | No | No | No | No | ? | ? | No | No | No | No | No | No | No | No | No | No |
| Bourne shell 1977 version | No | No | No | No | No | No | No | ? | ? | No | No | No | No | No | No | Yes | No | External | No |
| Bourne shell current version | No | Yes[nb 8] | No | No | Yes[nb 8] | No | No | Yes | Yes | No | Yes (CDPATH, pushd, popd, dirs), CDPATH since SVr4 | No | No | No | No | Yes | No | External | No |
| POSIX shell | No | No | No | No | Yes | No | No | Yes | Yes | No | Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
No | No | No | No | Yes | No | External | No |
| bash (v4.0) | Yes | Yes | Yes | Yes[nb 9] | Yes | No | No | Yes | Yes | No | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
optional | No | No | No | Yes | Yes | External | No |
| csh | Yes | Yes | No | No | Yes | No | No | Yes | Yes | No | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
optional | No | No | No | Yes | No | External | No |
| tcsh | Yes | Yes | when defined | No | Yes | No | No | Yes | Yes | No | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
optional | Yes | No | No | Yes | No | External | No |
| Hamilton C shell | Yes | Yes | No | Yes | Yes | No | No | Yes | Yes | No | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
No | No | No | No | Yes | No | External | No |
| Scsh | No | No | No | No | No | No | No | ? | ? | No | No | No | No | No | No | Yes | No | External | No |
| ksh (ksh93t+) | Yes (extendable)Script error: No such module "Check for unknown parameters". |
Yes (extendable)Script error: No such module "Check for unknown parameters". |
No | No | Yes | No | No | Yes | Yes | No | Yes (Template:Mono builtin, Template:Mono, Template:Mono implemented as functions)Script error: No such module "Check for unknown parameters". |
No | No | No | No | Yes | Yes | External | No |
| pdksh | Yes | Yes | No | No | Yes | No | No | Yes | Yes | No | No | No | No | No | No | Yes | Yes | External | No |
| zsh | Yes | Yes | Yes | Yes[25] | Yes | Yes[26] | Yes (via Template:Mono or user-defined[27])Script error: No such module "Check for unknown parameters". |
Yes | Yes | Third-party extension[28] | Yes | optional | Yes | No | when defined (as ZLE widgets) | Yes | Yes | External | Yes |
| ash | No | No | No | No | Yes | No | No | Yes | Yes | No | No | No | No | No | No | Yes | Yes | External | No |
| CCP | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No | No |
| COMMAND.COM | No | No | No | No | No[nb 10][nb 11] | No | No | No | No (only in DR-DOS through %$ON%, %$OFF%, %$HEADER%, %$FOOTER%) | No | No | No | No | No (only single-stepping with COMMAND /Y[29]) | No | No | No (only via external Template:Mono command, in DR-DOS also via Template:Mono / Template:Mono internal commands) | No | No |
| OS/2 CMD.EXE |
Yes | Yes | No | No | Yes | No | No | No | No | No | No | No | No | No | No | No | No | No | No |
| Windows CMD.EXE |
partial | partial | No | No | Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
No | No | No | No | No | Yes (Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
No | No | No | No | Yes (via Template:Mono command) | No | No | No |
| 4DOS | Yes | Yes | Yes | Yes | Yes[nb 12][nb 13] | No | No | Yes | No | No | (via popup, extended directory searches, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono commands and Template:Mono function) | Yes | No | Yes | No | Yes (via Template:Mono, Template:Mono and Template:Mono commands) | Yes (via Template:Mono function, and indirectly via a combination of Template:Mono, Template:Mono, Template:Mono commands) | No | Yes |
| 4OS2 | ? | ? | ? | ? | Yes | No | No | Yes | No | No | Yes | Yes | No | ? | No | ? | ? | No | Yes |
| TCC (formerly 4NT) | Yes | Yes | Yes | Yes | Yes | No | No | Yes | No | Yes | (via popup, extended directory searches, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono commands and Template:Mono function) | Yes | No | Yes | No | Yes (via Template:Mono, Template:Mono, Template:Mono and Template:Mono commands) | Yes (via Template:Mono function, and indirectly via a combination of Template:Mono, Template:Mono, Template:Mono commands)[nb 14] | No | Yes |
| PowerShell | Yes | Yes | Yes | Yes | Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes | Yes; via PSReadLine[30] module (bundled in v5.0[31]) or in ISE[32] | Third-party extension[33] | Yes[34] | Yes; via PSReadLine[30] module (bundled in v5.0) or in ISE[32] | Yes (multiple stacks; multiple location types;[35] Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes, in PSReadLine[30] module | Yes, in ISE[32] | Yes, in ISE[32] | Yes | Yes[36] | Yes[37] | Yes, in ISE[32] | popup window[38] |
| rc | Yes[nb 15] | Yes[nb 15] | No | No | Yes[nb 15] | No | No | No | ? | No | No | No | No | No | No | ? | No | No | No |
| BeanShell | Yes | Yes | No | No | No | No | No | ? | ? | No | No | No | No | No | No | No | No | No | No |
| VMS DCL | Minimum uniqueness scheme | No | No | No | Yes | Yes | No | ? | ? | No | No | No | No | No | No | Yes | No | No | No |
| fish | Yes | Yes | Yes[39] | Yes[39] | Yes | No | Yes | Yes | Yes (built-in helper available[40])Script error: No such module "Check for unknown parameters". |
Yes | Yes | Yes | Yes | Yes[nb 16] | Yes, using Template:Mono command | Yes | (via Template:Mono command[41]) | No | No |
| Shell | Command name completion |
Path completion |
Command argument completion |
Wildcard completion |
Command history |
Mandatory argument prompt |
Automatic suggestions |
Colored directory listings |
Text highlighting |
Syntax highlighting |
Directory history, stack or similar features | Implicit directory change |
Autocorrection | Integrated environment |
Snippets | Value prompt |
Menu/options prompt |
Progress indicator |
Context sensitive help |
Background execution
Background execution allows a shell to run a command without user interaction in the terminal, freeing the command line for additional work with the shell. POSIX shells and other Unix shells allow background execution by using the & character at the end of command.
Completions
Completion features assist the user in typing commands at the command line, by looking for and suggesting matching words for incomplete ones. Completion is generally requested by pressing the completion key (often the Template:Keypress key).
Command name completion is the completion of the name of a command. In most shells, a command can be a program in the command path (usually $PATH), a builtin command, a function or alias.
Path completion is the completion of the path to a file, relative or absolute.
Wildcard completion is a generalization of path completion, where an expression matches any number of files, using any supported syntax for file matching.
Variable completion is the completion of the name of a variable name (environment variable or shell variable). Bash, zsh, and fish have completion for all variable names. PowerShell has completions for environment variable names, shell variable names and — from within user-defined functions — parameter names.
Command argument completion is the completion of a specific command's arguments. There are two types of arguments, named and positional: Named arguments, often called options, are identified by their name or letter preceding a value, whereas positional arguments consist only of the value. Some shells allow completion of argument names, but few support completing values.
Bash, zsh and fish offer parameter name completion through a definition external to the command, distributed in a separate completion definition file. For command parameter name/value completions, these shells assume path/filename completion if no completion is defined for the command. Completion can be set up to dynamically suggest completions by calling a shell function.[42] The fish shell additionally supports parsing of man pages to extract parameter information that can be used to improve completions/suggestions. In PowerShell, all types of commands (cmdlets, functions, script files) inherently expose data about the names, types and valid value ranges/lists for each argument. This metadata is used by PowerShell to automatically support argument name and value completion for built-in commands/functions, user-defined commands/functions as well as for script files. Individual cmdlets can also define dynamic completion of argument values where the completion values are computed dynamically on the running system.
Command history
Template:Main article Users of a shell may find themselves typing something similar to what they have typed before. Support for command history means that a user can recall a previous command into the command-line editor and edit it before issuing the potentially modified command.
Shells that support completion may also be able to directly complete the command from the command history given a partial/initial part of the previous command.
Most modern shells support command history. Shells which support command history in general also support completion from history rather than just recalling commands from the history. In addition to the plain command text, PowerShell also records execution start- and end time and execution status in the command history.
Mandatory argument prompt
Script error: No such module "labelled list hatnote". Mandatory arguments/parameters are arguments/parameters which must be assigned a value upon invocation of the command, function or script file. A shell that can determine ahead of invocation that there are missing mandatory values, can assist the interactive user by prompting for those values instead of letting the command fail. Having the shell prompt for missing values will allow the author of a script, command or function to mark a parameter as mandatory instead of creating script code to either prompt for the missing values (after determining that it is being run interactively) or fail with a message.
Automatic suggestions
Shells featuring automatic suggestions display optional command-line completions as the user types. The PowerShell and fish shells natively support this feature; pressing the Template:Keypress key inserts the completion.
Implementations of this feature can differ between shells; for example, PowerShell[43] and zsh[44] use an external module to provide completions, and fish derives its completions from the user's command history.[45]
Directory history, stack or similar features
Script error: No such module "labelled list hatnote". Shells may record a history of directories the user has been in and allow for fast switching to any recorded location. This is referred to as a "directory stack". The concept had been realized as early as 1978[46] in the release of the C shell (csh).
Command line interpreters 4DOS and its graphical successor Take Command Console also feature a directory stack.
Implicit directory change
A directory name can be used directly as a command which implicitly changes the current location to the directory.
This must be distinguished from an unrelated load drive feature supported by Concurrent DOS, Multiuser DOS, System Manager and REAL/32, where the drive letter L: will be implicitly updated to point to the load path of a loaded application, thereby allowing applications to refer to files residing in their load directory under a standardized drive letter instead of under an absolute path.[47]
Autocorrection
When a command line does not match a command or arguments directly, spell checking can automatically correct common typing mistakes (such as case sensitivity, missing letters). There are two approaches to this; the shell can either suggest probable corrections upon command invocation, or this can happen earlier as part of a completion or autosuggestion.
The tcsh and zsh shells feature optional spell checking/correction, upon command invocation.
Fish does the autocorrection upon completion and autosuggestion. The feature is therefore not in the way when typing out the whole command and pressing enter, whereas extensive use of the tab and right-arrow keys makes the shell mostly case insensitive.
The PSReadLine[30] PowerShell module (which is shipped with version 5.0) provides the option to specify a CommandValidationHandler ScriptBlock which runs before submitting the command. This allows for custom correcting of commonly mistyped commands, and verification before actually running the command.
Progress indicator
A shell script (or job) can report progress of long running tasks to the interactive user.
Unix/Linux systems may offer other tools support using progress indicators from scripts or as standalone-commands, such as the program "pv".[48] These are not integrated features of the shells, however.
Colored directory listings
JP Software command-line processors provide user-configurable colorization of file and directory names in directory listings based on their file extension and/or attributes through an optionally defined %COLORDIR% environment variable.
For the Unix/Linux shells, this is a feature of the Template:Mono command and the terminal.
Text highlighting
The command line processors in DOS Plus, Multiuser DOS, REAL/32 and in all versions of DR-DOS support a number of optional environment variables to define escape sequences allowing to control text highlighting, reversion or colorization for display or print purposes in commands like TYPE. All mentioned command line processors support %$ON% and %$OFF%. If defined, these sequences will be emitted before and after filenames. A typical sequence for %$ON% would be \033[1m in conjunction with ANSI.SYS, \033p for an ASCII terminal or \016 for an IBM or ESC/P printer. Likewise, typical sequences for %$OFF% would be \033[0m, \033q, \024, respectively. The variables %$HEADER% and %$FOOTER% are only supported by COMMAND.COM in DR-DOS 7.02 and higher to define sequences emitted before and after text blocks in order to control text highlighting, pagination or other formatting options.
For the Unix/Linux shells, this is a feature of the terminal.
Syntax highlighting
Template:Main article A defining feature of the fish shell is built-in syntax highlighting, As the user types, text is colored to represent whether the input is a valid command or not (the executable exists and the user has permissions to run it), and valid file paths are underlined.[49]
An independent project offers syntax highlighting as an add-on to the Z Shell (zsh).[50] This is not part of the shell, however.
PowerShell provides customizable syntax highlighting on the command line through the PSReadLine[30] module. This module can be used with PowerShell v3.0+, and is bundled with v5.0 onwards. It is loaded by default in the command line host "powershell.exe" since v5.0.[51]
Take Command Console (TCC) offers syntax highlighting in the integrated environment.
Context sensitive help
4DOS, 4OS2, 4NT / Take Command Console and PowerShell (in PowerShell ISE) looks up context-sensitive help information when Template:Keypress is pressed.
Zsh provides various forms of configurable context-sensitive help as part of its Template:Mono widget, Template:Mono command, or in the completion of options for some commands.
The fish shell provides brief descriptions of a command's flags during tab completion.
Programming features
| Shell | Functions | Exception handling | Search & replace on variable substitutions |
Template:Verth | Template:Verth | Math function library | Linear arrays or lists | Template:Verth | Template:Verth | Template:Verth | Pseudorandom number generation | Bytecode |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Bourne shell 1977 version | No | Yes (via Template:Mono) | No | No | No | No | No | No | No | Yes | No | No |
| Bourne shell current version | Yes since SVR2 | Yes (via Template:Mono) | No | Yes[nb 8] | No | No | No | No | No | Yes | No | No |
| POSIX shell | Yes | Yes (via Template:Mono) | No | Yes | No | No | No | No | No | Yes | No | No |
| bash (v4.0) | Yes | Yes (via Template:Mono) | Yes (via Template:Mono} syntax)Script error: No such module "Check for unknown parameters". |
Yes | No | No | Yes | Yes | No | Yes | Yes (Template:Mono) Script error: No such module "Check for unknown parameters". |
No |
| csh | No | No | Yes (via Template:Mono syntax)Script error: No such module "Check for unknown parameters". |
Yes | No | No | Yes | No | No | Yes | No | No |
| tcsh | Work in progress[52] | No | Yes (via Template:Mono syntax)Script error: No such module "Check for unknown parameters". |
Yes | No | No | Yes | No | No | Yes | No | No |
| Hamilton C shell | Yes | No | Yes (via Template:Mono syntax)Script error: No such module "Check for unknown parameters". |
Yes | Yes | Yes | Yes | No | No | Yes | Yes (random utility) | No |
| Scsh | Yes | ? | Yes (via string functions and regular expressions)Script error: No such module "Check for unknown parameters". |
? | ? | ? | Yes | ? | Yes | Yes | Yes (random-integer, random-real)Script error: No such module "Check for unknown parameters". |
Yes (compiler is Scheme48 virtual machine, via Template:Mono)Script error: No such module "Check for unknown parameters". |
| ksh (ksh93t+) | Yes | Yes (via Template:Mono) | Yes (via Template:Mono} syntax and builtin commands)Script error: No such module "Check for unknown parameters". |
Yes | Yes | Yes | Yes | Yes | No | Yes | Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (compiler is called Template:Mono)Script error: No such module "Check for unknown parameters". |
| pdksh | Yes | Yes (via Template:Mono) | No | Yes | No | No | Yes | No | No | Yes | Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
No |
| zsh | Yes | Yes | Yes (via Template:Mono} and Template:Mono} syntax)Script error: No such module "Check for unknown parameters". |
Yes | Yes | Yes (Template:Mono module)Script error: No such module "Check for unknown parameters". |
Yes | Yes | No | Yes | Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (built-in Template:Mono command)Script error: No such module "Check for unknown parameters". |
| ash | Yes | Yes (via Template:Mono) | No | Yes (since 1992)[53]Script error: No such module "Check for unknown parameters". |
No | No | No | No | No | Yes | No | No |
| CCP | No | ? | No | No | ? | ? | No | No | No | No | No | No |
| COMMAND.COM | No | Partial (only Auto-fail (via Template:Mono (or Template:Mono in some versions of DR-DOS)) | No | No | No | No | No | No | No | No | No | No |
| OS/2 CMD.EXE | No | No | No | ? | No | No | ? | No | No | No | No | No |
| Windows CMD.EXE | Yes (via Template:Mono)Script error: No such module "Check for unknown parameters". |
No | Yes (via Template:Mono syntax)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono)[54]Script error: No such module "Check for unknown parameters". |
No | No | Yes (via Template:Mono[55])Script error: No such module "Check for unknown parameters". |
No | No | No | Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
No |
| 4DOS | Yes | Yes (via Template:Mono command, optional Auto-fail via Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono function)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono)Script error: No such module "Check for unknown parameters". |
? | ? | Yes (via ranges, include lists, Template:Monofile lists and Template:Mono command)Script error: No such module "Check for unknown parameters". |
No | No | Yes | Yes (Template:Mono function)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono command)Script error: No such module "Check for unknown parameters". |
| 4OS2 | ? | ? | ? | ? | ? | ? | ? | ? | No | Yes | Yes (Template:Mono function) | ? |
| TCC (formerly 4NT) | Yes | Yes (via Template:Mono and various Template:Mono commands)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono function)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono)Script error: No such module "Check for unknown parameters". |
? | ? | Yes (via ranges, include lists, Template:Monofile lists and Template:Mono command)Script error: No such module "Check for unknown parameters". |
? | No | Yes | Yes (Template:Mono function) | Yes (via Template:Mono command) |
| PowerShell | Yes | Yes (Try-Catch-Finally) | Yes (Template:Mono operator)Script error: No such module "Check for unknown parameters". |
Yes | Yes | [Math] class[56] | Yes | Yes | Yes[57] | Yes | Yes | Yes, automatic |
| rc | Yes | Yes | No | Yes | ? | ? | Yes | ? | No | Yes | No | No |
| BeanShell | Yes | Yes | ? | Yes | ? | ? | Yes | Yes | No | Yes | Yes | Yes |
| VMS DCL | Yes | Yes | No | Yes | No | yes, for compiled programs | Yes | No | No | No | No | No |
| fish | Yes | Yes (via Template:Mono) | Yes, via Template:Mono builtin command[58] | Yes | Yes | Yes | Yes | No | No | Yes | Yes (Template:Mono)Script error: No such module "Check for unknown parameters". |
No |
String processing and filename matching
| Shell | String processing | Alternation (Brace expansion) | Pattern matching (regular expressions built-in) | Pattern matching (filename globbing) | Globbing qualifiers (filename generation based on file attributes) | Recursive globbing (generating files from any level of subdirectories) |
|---|---|---|---|---|---|---|
| Bourne shell 1977 version | ? | No | No | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
No | No |
| Bourne shell recent version | Partial (prefix and suffix stripping in variable expansion) | No | No | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
No | No |
| POSIX shell | Partial (prefix and suffix stripping in variable expansion) | No | No | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
No | No |
| bash (v4.0) | Partial (prefix and suffix stripping in variable expansion) | Yes | Yes | Yes (Template:Mono, Template:Mono, Template:Mono, Template:Mono})Script error: No such module "Check for unknown parameters". |
No | Yes (Template:Mono) |
| csh | Yes (:s and other editing operators)Script error: No such module "Check for unknown parameters". |
Yes | No | Yes | No | No |
| tcsh | Yes (:s and other editing operators)Script error: No such module "Check for unknown parameters". |
Yes | Yes | Yes | No | No |
| Hamilton C shell | Yes (:s and other editing operators + substr, strlen, strindex, printf, reverse, upper, lower, concat and other builtin functions)Script error: No such module "Check for unknown parameters". |
Yes | No | Yes | No | Yes (via indefinite directory Template:Mono wildcard[59])Script error: No such module "Check for unknown parameters". |
| Scsh | ? | ? | Yes | Yes | No | No |
| ksh (ksh93t+) | Partial (prefix, suffix stripping and string replacement in variable expansion) | Yes[60] | Yes | Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
No | Yes (with Template:Mono, no following of symlinks) |
| pdksh | ? | Yes[60] | No | Yes | No | No |
| zsh | Yes (through variable processing: e.g. substring extraction, various transformations via parameter expansion) | Yes | Yes | Yes (Template:Mono, Template:Mono, Template:Mono, extended globbing[61])Script error: No such module "Check for unknown parameters". |
Yes | Yes (Template:Mono or Template:Mono to follow symlinks) |
| ash | ? | ? | No | Yes | No | No |
| CCP | No | No | No | No | No | No |
| COMMAND.COM | No | No | No | Yes (Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
No | No |
| OS/2 CMD.EXE | No | No | No | Yes (Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Partial (only in Template:Mono command) | No |
| Windows CMD.EXE | Partial (only through Template:Mono and Template:Mono) | No | No[nb 17] | Yes (Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
Partial (only in Template:Mono command) | Yes (via Template:Mono command, or, where available, indirectly via Template:Mono subdir option) |
| 4DOS | Yes (through variable functions Template:Mono, extended environment variable processing, various string commands and Template:Mono and Template:Mono) | No | No | Yes (Template:Mono, Template:Mono, Template:Mono, extended wildcards, Template:Mono popup command)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono attribute and Template:Mono description options and Template:Mono size, Template:Mono time, Template:Mono date, and Template:Mono file exclusion ranges) | Yes (via Template:Mono command, or indirectly via Template:Mono command or, where available, Template:Mono subdir option) |
| 4OS2 | ? | No | No | ? | ? | ? |
| TCC (formerly 4NT) | Yes (through variable functions Template:Mono, extended environment variable processing, various string commands and Template:Mono and Template:Mono) | No | Yes | Yes (Template:Mono, Template:Mono, Template:Mono, extended wildcards, Template:Mono popup command)Script error: No such module "Check for unknown parameters". |
Yes (via Template:Mono attribute and Template:Mono description options and Template:Mono size, Template:Mono time, Template:Mono date, Template:Mono owner, and Template:Mono file exclusion ranges) | Yes (via Template:Mono command, or indirectly via Template:Mono command or, where available, Template:Mono subdir option) |
| PowerShell | Yes (Concat/Substring/Insert/Remove/Replace, ToLower/ToUpper, Trim/TrimStart/TrimEnd, Compare, Contains/StartsWith/EndWith, Format, IndexOf/LastIndexOf, Pad/PadLeft/PadRight, Split/Join, regular expression functions and other .NET string functions)Script error: No such module "Check for unknown parameters". |
Range operator for numbers[62] | Yes (full regex support)[nb 18]Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono, Template:Mono, Template:Mono)Script error: No such module "Check for unknown parameters". |
? | ? |
| rc | ? | ? | No | Yes | No | No |
| BeanShell | ? | ? | Yes | ? | ? | ? |
| VMS DCL | Yes | No | No | Yes | No | Yes (via Template:Mono) |
| fish | Yes (builtin string function)Script error: No such module "Check for unknown parameters". |
Yes | Yes (via builtin Template:Mono and Template:Mono functions)Script error: No such module "Check for unknown parameters". |
Yes (Template:Mono, Template:Mono, Template:Mono})Script error: No such module "Check for unknown parameters". |
No | Yes (Template:Mono) |
Inter-process communication
| Shell | Pipes | Command substitution | Process substitution | Subshells | TCP/UDP connections as streams | Keystroke stacking |
|---|---|---|---|---|---|---|
| Bourne shell | bytes concurrent | Yes | No | Yes | No | Template:N/A[nb 19] |
| POSIX shell | bytes concurrent | Yes | No | Yes | No | Template:N/A[nb 19] |
| bash (v4.0) | bytes concurrent | Yes | Yes (if system supports Template:Mono or named pipes)Script error: No such module "Check for unknown parameters". |
Yes | Yes (client only)Script error: No such module "Check for unknown parameters". |
Template:N/A[nb 19] |
| csh | bytes concurrent | Yes | No | Yes | No | Template:N/A[nb 19] |
| tcsh | bytes concurrent | Yes | No | Yes | No | Template:N/A[nb 19] |
| Hamilton C shell | bytes concurrent | Yes | No | Yes | No | ? |
| Scsh | text | ? | ? | ? | Yes | Template:N/A[nb 19] |
| ksh (ksh93t+) | bytes (may contain serialized objects if Template:Mono is used) concurrent | Yes (Template:Mono and Template:Mono})Script error: No such module "Check for unknown parameters". |
Yes (if system supports Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes | Yes (and SCTP support, client only)Script error: No such module "Check for unknown parameters". |
Template:N/A[nb 19] |
| pdksh | bytes concurrent | Yes | No | Yes | No | Template:N/A[nb 19] |
| zsh | bytes concurrent | Yes | Yes | Yes | Yes (client and server, but only TCP)Script error: No such module "Check for unknown parameters". |
Template:N/A[nb 19] |
| ash | bytes concurrent | Yes | No | Yes | No | Template:N/A[nb 19] |
| CCP | No | No | No | No | No | No |
| COMMAND.COM | text sequential temporary files | No | No | Partial (only under DR-DOS multitasker via Template:Mono) | No | No |
| OS/2 CMD.EXE | text concurrent | No | No | ? | No | No |
| Windows CMD.EXE | text concurrent | Yes (via Template:Mono command)Script error: No such module "Check for unknown parameters". |
No | Yes (Backtick: Template:Mono in Template:Mono)Script error: No such module "Check for unknown parameters". |
No | No |
| 4DOS | text sequential temporary files | Yes (via Template:Mono command)Script error: No such module "Check for unknown parameters". |
? | Partial (via Template:Mono and Template:Mono, or via Template:Mono, Template:Mono and Template:Mono and Template:Mono) | No | Yes (via Template:Mono and Template:Mono)[63] |
| 4OS2 | text concurrent | ? | ? | ? | No | Yes (via Template:Mono) |
| TCC (formerly 4NT) | text concurrent | Yes (via Template:Mono command)Script error: No such module "Check for unknown parameters". |
? | Partial (via Template:Mono and Template:Mono) | Yes (via Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono, Template:Mono and Template:Mono, client only) | Yes (via Template:Mono) |
| PowerShell | objects concurrent | Yes | No | Yes | Yes | ? |
| rc | text concurrent | Yes | Yes (via: Template:Mono} if system supports Template:Mono)Script error: No such module "Check for unknown parameters". |
Yes | No | ? |
| BeanShell | not supported | ? | ? | ? | Yes | ? |
| VMS DCL | text (via Template:Mono command) | Yes | No | Yes (spawn)Script error: No such module "Check for unknown parameters". |
Yes (server TCP only)Script error: No such module "Check for unknown parameters". |
No |
| fish | bytes concurrent | Yes (Template:Mono) | No (broken)[64] | No | No | Template:N/A[nb 19] |
Keystroke stacking
In anticipation of what a given running application may accept as keyboard input, the user of the shell instructs the shell to generate a sequence of simulated keystrokes, which the application will interpret as a keyboard input from an interactive user. By sending keystroke sequences the user may be able to direct the application to perform actions that would be impossible to achieve through input redirection or would otherwise require an interactive user. For example, if an application acts on keystrokes, which cannot be redirected, distinguishes between normal and extended keys, flushes the queue before accepting new input on startup or under certain conditions, or because it does not read through standard input at all. Keystroke stacking typically also provides means to control the timing of simulated keys being sent or to delay new keys until the queue was flushed etc. It also allows to simulate keys which are not present on a keyboard (because the corresponding keys do not physically exist or because a different keyboard layout is being used) and therefore would be impossible to type by a user.
Security features
Template:Importance section Template:Sort-under
Secure prompt
Some shell scripts need to query the user for sensitive information such as passwords, private digital keys, PIN codes or other confidential information. Sensitive input should not be echoed back to the screen/input device where it could be gleaned by unauthorized persons. Plaintext memory representation of sensitive information should also be avoided as it could allow the information to be compromised, e.g., through swap files, core dumps etc.[67]
The shells bash, zsh and PowerShell offer this as a specific feature.[68][69] Shells which do not offer this as a specific feature may still be able to turn off echoing through some other means. Shells executing on a Unix/Linux operating system can use the Template:Mono external command to switch off/on echoing of input characters.[70] In addition to not echoing back the characters, PowerShell's -AsSecureString option also encrypts the input character-by-character during the input process, ensuring that the string is never represented unencrypted in memory where it could be compromised through memory dumps, scanning, transcription etc.
Execute permission
Some operating systems define an execute permission which can be granted to users/groups for a file when the file system itself supports it.
On Unix systems, the execute permission controls access to invoking the file as a program, and applies both to executables and scripts.
As the permission is enforced in the program loader, no obligation is needed from the invoking program, nor the invoked program, in enforcing the execute permissionTemplate:Snd this also goes for shells and other interpreter programs.
The behaviour is mandated by the POSIX C library that is used for interfacing with the kernel. POSIX specifies that the exec family of functions shall fail with EACCESS (permission denied) if the file denies execution permission (see Template:Man).
The execute permission only applies when the script is run directly. If a script is invoked as an argument to the interpreting shell, it will be executed regardless of whether the user holds the execute permission for that script.
Although Windows also specifies an execute permission, none of the Windows-specific shells block script execution if the permission has not been granted.
Restricted shell subset
Several shells can be started or be configured to start in a mode where only a limited set of commands and actions is available to the user. While not a security boundary (the command accessing a resource is blocked rather than the resource) this is nevertheless typically used to restrict users' actions before logging in.
A restricted mode is part of the POSIX specification for shells, and most of the Linux/Unix shells support such a mode where several of the built-in commands are disabled and only external commands from a certain directory can be invoked.[71][72]
PowerShell supports restricted modes through session configuration files or session configurations. A session configuration file can define visible (available) cmdlets, aliases, functions, path providers and more.[73]
Safe data subset
Scripts that invoke other scripts can be a security risk as they can potentially execute foreign code in the context of the user who launched the initial script. Scripts will usually be designed to exclusively include scripts from known safe locations; but in some instances, e.g. when offering the user a way to configure the environment or loading localized messages, the script may need to include other scripts/files.[74] One way to address this risk is for the shell to offer a safe subset of commands which can be executed by an included script.
Notes
References
External links
- Script error: No such module "citation/CS1".
- Script error: No such module "citation/CS1".
- ↑ A platform independent version based on the historical UNIX V7 original source code is available from Geoff Collyer
- ↑ A platform independent version based on the SVr4/Solaris source code is available from Jörg Schilling
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ As part of IEEE Std.1003.2-1992 (POSIX.2); integrated into IEEE Std.1003.1 with the 2001 revision.
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1"., "Bash now supports the \u and \U Unicode escape."
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "Citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ a b ksh93(1) man page
- ↑ a b Default shell in OpenBSD is ksh (pdksh).
- ↑ The zsh command line editor is fully configurable and can allow mouse support in various ways such as with Stéphane Chazelas's Template:Mono.
- ↑ zsh(1) man page and subpages
- ↑ zshbuiltins(1) man page
- ↑ Template:Cite mailing list
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ This applies only on reserved words and other syntactic features.
- ↑ e.g. via 3rd party such as zsh-autosuggestions
- ↑ zsh does not feature syntax highlighting, but a 3rd party project exists which offers this capability as an add-on: zsh-syntax-highlighting
- ↑ Cite error: Invalid
<ref>tag; no text was provided for refs namedPaul_1997_OD-A3 - ↑ a b c d e Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ a b c d e Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Push-Location (with alias
pushd) and Pop-Location (with aliaspopd) allows multiple location types (directories of file systems, organizational units of Active Directory, nodes of Windows Registry etc) to be pushed onto and popped from location stacks. - ↑ The $host.ui.PromptForChoice function allows for a menu-style prompt for choices. The prompt works from background jobs as well as from remote sessions, displaying the menu prompt on the console of the controlling session.
- ↑ The Template:Mono cmdlet writes a progress bar which can indicate percentage, remaining seconds etc. The progress bar messages work from background jobs or remote sessions in addition to interactive scripts, i.e. the progress bar is displayed on the console of the controlling session, not as part of the regular output.
- ↑ The Template:Mono cmdlet inspects the command definition and opens an interactive windows with a named input field for each parameter/switch
- ↑ a b Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Introduce 'function' built-in by Matheus Garcia
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ The .NET System.Math class defines mathematical functions that can be used through the shortcut Template:Mono, e.g. Template:Mono for the sinus function.[1]
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ a b Script error: No such module "citation/CS1".
- ↑ Zsh offers a variety of globbing options.
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
- ↑ Script error: No such module "citation/CS1".
Cite error: <ref> tags exist for a group named "nb", but no corresponding <references group="nb"/> tag was found