Сравнение командных оболочек
Материал из Викиреальностя
Командная оболочка — это компьютерная программа с интерфейсом командной строки операционной системы.
Содержание |
[править] Общие характеристики
Обычное окружение (или среда) | Обычно вызывается | Появление | Платформо-независимое | Default login shell in | Default script shell in | Лицензия | Unicode | Перенаправление потоков | Встроенная поддержка CIM/WBEM | Блокирование неподписанных скриптов | доступно как статически связанный, один независимый исполняемый файл | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Bourne shell | 7th Ed. UNIX | sh | 1977 | Нет | 7th Ed. UNIX | 7h Ed. UNIX | AT&T prop.[1] | С SVr4[2] | Да (произвольные файловые дескрипторы) | Нет | Нет | Да |
POSIX shell[3] | POSIX | sh | 1992[4] | Да | N/A | POSIX | N/A | Да, если используется настроенной локалью | Да (произвольные файловые дескрипторы) | Нет | Нет | N/A |
bash (v4.0) | POSIX | bash, sh | 1989[5] | Да | GNU, Mac OS X 10.3+ | GNU, Haiku, Mac OS X |
GPL | Да | Да (произвольные файловые дескрипторы) | Нет | Нет | Да |
csh | POSIX | csh | 1978 | Да | SunOS | ? | BSD | Нет | Да (stdin, out, out+err) | Нет | Нет | Да |
tcsh | POSIX | tcsh, csh | 1983[6] | Да | FreeBSD, ранее Mac OS X | ? | BSD | Да | Да (stdin, out, out+err) | Нет | Нет | Да |
Scsh | POSIX | scsh | 1994 | Да | ? | ? | BSD-style | ? | Да | Нет | Нет | Да |
ksh (ksh93t+) | POSIX | ksh | 1983[7][8] | Да | AIX, HP-UX | OpenSolaris | Common Public License | С SVr4[9] | Да (произвольные файловые дескрипторы) | Нет | Нет | Да |
pdksh | POSIX | ksh, sh | 1989 ? | Да | OpenBSD[10] | OpenBSD[10] | Общественное достояние | Нет | Да (произвольные файловые дескрипторы) | Нет | Нет | Да |
zsh | POSIX | zsh | 1990 | Да | Grml, GoboLinux | Grml | BSD-подобная | Да | Да (произвольные файловые дескрипторы) | Нет | Нет | Да |
ash | POSIX | sh | 1989 | Да | Minix, BusyBox based systems | FreeBSD, NetBSD, Minix, BusyBox based systems | BSD-style | Да | Да (произвольные файловые дескрипторы | Нет | Нет | Да |
Windows cmd.exe[11] |
Win32, Win64 | cmd | 1993 | Нет | Windows NT, 2000, XP, Server 2003, Vista/Server 2008, Windows 7/Server 2008 R2, Windows 8/Server 2012, Windows 8.1/Server 2012 R2 | Windows NT, 2000, XP, Server 2003, Vista/Server 2008, Windows 7/Server 2008 R2, Windows 8/Server 2012, Windows 8.1/Server 2012 R2 | MS-EULA[12] | Да | Да | Нет | Нет | Да |
TCC (ранее 4NT) | Win32 | ? | 1993 | Нет | ? | ? | Shareware | Да | Да (stdin, out, err) | Нет | Нет | Нет |
Windows PowerShell | .NET | powershell | 2006 | No (3rd party in dev[13]) |
Windows Server 2008, 7, Vista, XP[14] | Windows Server 2008, 7 | MS-EULA[12] или BSD/GPL (PASH) |
Да | Да | Да | Да | Нет |
COMMAND.COM | DOS | command | 1980 | Нет (3rd party available[15]) |
DOS, Windows 95, 98, ME | DOS, Windows 95, 98, ME | MS-EULA[16] или BSD/GPL (свободные клоны) |
Нет | Да (только stdin, out, COMn/LPT) | Нет | Нет | Да |
4DOS | DOS | ? | 1989 | Нет | ? | ? | Лицензия MIT, с ограничениями | Нет | Да (stdin, out, err) | Нет | Нет | Нет |
OS/2 cmd.exe |
OS/2 | cmd | 1987 | Нет | OS/2 | OS/2 | IBM-EULA[17] | Нет | Да (stdin, out, err) | Нет | Нет | ? |
rc | Plan 9, POSIX | rc | 1989 | Да | Plan 9, Version 10 Unix | Plan 9, Version 10 Unix | Lucent Public License | Да | Да | Нет | Нет | Да |
BeanShell | Java | ? | 2005 | Да | ? | ? | LGPL | Да | Да | ? | Нет | Да (bsh.jar) |
Python shell | Python | python, ipython | 1991 | Да | ? | ? | Python | Да | Да | ? | Нет | Да, на Windows через py2exe |
Ruby shell | Ruby | irb | 1995 | Да | ? | ? | Ruby, BSD | 1.9: Да 1.8: ограниченно |
Да | ? | Нет | Да с помощью rubyscript2exe.rb |
VMS DCL[18] | OpenVMS | ? | 1977 ? | Нет | VMS | VMS | ? | Нет | Да (присваивание sys$input, sys$output) | Нет | Нет | Нет |
Обычное окружение (или среда) | Обычно вызывается | Introduced | Платформо-независимое | Default login shell in | Default script shell in | Лицензия | Unicode | Перенаправление потоков | Встроенная поддержка CIM/WBEM | Блокирование неподписанных скриптов | доступно как статически связанный, один независимый исполняемый файл |
[править] Интерактивные возможности
Completion | Directory stack (pushd/popd) | Directory History Window (popup) | Implicit Directory Change — If command is dir name changes to it | История команд | History completion | Проверка правописания | Default user prompt[19] | Custom command prompt | Aliases | Binary prefix notation | Job control | Startup scripts | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bourne shell | Нет | Нет | Нет | Нет | Нет | Нет | Нет | $ | Да (переменная: $PS1) | Через функции | Нет | С SVr4 | Да |
POSIX shell | Нет | Нет | Нет | Нет | Да | Нет | Нет | $ | Да (переменная: $PS1) | Да | Нет | Да | Да |
bash (v4.0) | Да (расширяемое) | Да | Нет | Да (опциональное) |
Да | Да | Нет | bash-<version number>$ | Да (переменная: $PS1) | Да | Нет | Да | Да |
csh | Да (через клавишу ESC) | Да | Нет | Да (опциональное) |
Да | Да | Нет | % | Да (переменная: $prompt | Да | Нет | Да | Да |
tcsh | Да (расширяемое) | Да | Нет | Да (опциональное) |
Да | Да | экспериментальное | > | Да (переменная: $prompt | Да | Нет | Да | Да |
Scsh | Нет | Нет | Нет | Нет | Нет | Нет | Нет | > | Нет | Да (macro and procedure definitions) | Да | Да | Да |
ksh (ksh93t+) | Да (расширяемое) | Нет | Нет | Нет | Да | Да | Нет | $ | Да (переменная: $PS1, и больше) | Да | Нет | Да | Да |
pdksh | Да | Нет | Нет | Нет | Да | ? | Нет | $ | Да (переменная: $PS1) | Да | Нет | Да | Да |
zsh | Да (расширяемое) | Да | Нет | Да (опционально) |
Да | Да | Да | <hostname>% | Да (переменная: $PS1, и больше) | Да | Нет | Да | Да |
ash | Нет | Да | Нет | Нет | Да | Да | Нет | $ | Да (переменная: $PS1) | Да | Нет | Да | Да |
Windows cmd.exe |
Да (частично) | Да | Нет | Нет | Да (F7) | Да (F8) | Нет | <path>> | Да (переменная окружения: %PROMPT%) | Да ("macros", через doskey) | Нет | Нет | Да |
TCC (ранее 4NT) | Да (частично) | Да | Да | Да | Да | Да | Нет | [<path>] | Да (переменная окружения: %PROMPT) | Да | ? | Нет | Да (4start) |
Windows PowerShell | Да (extendable) | Да (all location types)[20] | Да | Нет | Да | Да (F8) | Нет | PS <path>> | Да (функция: prompt) | Да | Да | Да | Да |
COMMAND.COM | Нет | Нет | Нет | Нет | Нет[21][22] | Нет[21][22] | Нет | <path or drive name>> | Да (переменная окружения: %PROMPT%) | Да (используя SET или реестр) | Нет | Нет | Нет[23] |
4DOS | Да | Да | Да | Да | Да | Да | Нет | <path>> | Да (переменная окружения: %PROMPT) | Да | ? | Нет | Да (4start) |
OS/2 cmd.exe |
Да | ? | Нет | Нет | Да | ? | Нет | [<path>] | Да (переменная окружения: %PROMPT%) | Нет | Нет | Нет | Нет |
rc | Да[24] | ? | Нет | Нет | Да[24] | Да[24] | Нет | term%, ; | Да (функция: prompt, или переменная: $prompt) | Да (функции) | Нет | Handled by rio | Да |
BeanShell | Да | ? | Нет | Нет | Да | ? | Нет | bsh % | Да (переменная: bsh.prompt, или метод: getBshPrompt()) | ? | ? | ? | Да (.bshrc) |
Python shell | Да (предоставляется модулем rlcompleter или IPython) | Да (предоставляется IPython) | Нет | Нет | Да | Да (предоставляется IPython) | Нет | >>> | Да (переменная: sys.ps1) | Да (функции) | ? | Да | Да ($PYTHONSTARTUP или ipythonrc) |
Ruby shell | Да | Да (передать блок методу Dir.chdir()) | Нет | Нет | Да | Да (with UtilityBelt gem) | Нет | irb(main):001:0> | Да | Да | ? | Да | Да (.irbrc) |
VMS DCL | Нет | Нет | Нет | Нет | Да | Нет | Нет | $ | Да (команда SET PROMPT) | Да | Да | Да | Да (login.com) |
Completion | Directory stack (pushd/popd) | Directory History Window (popup) | Implicit Directory Change — If command is dir name changes to it | История команд | History completion | Проверка правописания | Default user prompt[19] | Custom command prompt | Aliases | Binary prefix notation | Job control | Startup scripts |
[править] Программные возможности
Функции | Обработка исключений | Поиск и замена по переменным | Параллельное присваивание | Variadic functions | Аргументы по умолчанию | Именованные параметры | Лямбда-функции | функция eval | Генератор псевдослучайных чисел | Байт-код | |
---|---|---|---|---|---|---|---|---|---|---|---|
Bourne shell | Да с SVr2 | Да (via trap) | Нет | Нет | С SVr2 | Нет | Нет | Нет | Да | Нет | Нет |
POSIX shell | Да | Да (via trap) | Нет | Нет | Да | Нет | Нет | Нет | Да | Нет | Нет |
bash (v4.0) | Да | Да (via trap) | Да (через ${//} синтаксис) | Нет | Да | Да | Нет | Нет | Да | Да ($RANDOM) | Нет |
csh | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет |
tcsh | Нет | Нет | Да (через ${:s//} синтаксис | Нет | Нет | Нет | Нет | Нет | Да | Нет | Нет |
Scsh | Да | ? | Да (через строковые функции и регулярные выражения) | Нет | Да | Нет | Нет | Да | Да | Да (random-integer, random-real) | Да (компилятор представляет собой Scheme48 виртуальную машину, "scshvm") |
ksh (ksh93t+) | Да | Да (via trap) | Да (через ${//} синтаксис и встроенные команды) | ? | Да | Да | Да (для определяемых пользователем "типов") | Нет | Да | Да ($RANDOM) | Да (компилятор называется "shcomp") |
pdksh | Да | Да (via trap) | Нет | ? | Да | Да | Нет | Нет | Да | Да ($RANDOM) | Нет |
zsh | Да | Да | Да (через ${:s//} и ${//} синтаксис) | ? | Да | Да | Нет | Нет | Да | Да ($RANDOM) | Да (встроенная команда "zcompile") |
ash | Да | Да (via trap) | Нет | Нет | Да | Да | Нет | Нет | Да | Нет | Нет |
Windows cmd.exe |
Да (через "call :label") | Нет | Да (via set %varname:expression syntax) | Нет | Нет | Нет | Нет | Нет | Нет | Да (%random%) | Нет |
TCC (ранее 4NT) | Да | Нет | Да (через функцию %@replace[ ]) | Нет | Нет | Нет | Нет | Нет | Да | Да (функция %@random[ ]) | Нет |
Windows PowerShell | Да | Да | Да (-replace operator) | Да | Да | Да | Да | Да | Да | Да | Да, автоматически |
COMMAND.COM | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
4DOS | Да | Нет | Да (через функцию %@replace[ ]) | Нет | ? | Нет | ? | Нет | Да | Да (функция %@random[ ]) | Нет |
OS/2 cmd.exe |
Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
rc | Да | Да | Нет | ? | Да | Да | ? | Нет | Да | Нет | Нет |
BeanShell | Да | Да | ? | ? | Нет | Нет | Нет | Нет | Да | Да | Да |
Python shell | Да | Да | Да (через строковые методы и регулярные выражения) | Да | Да | Да | Да | Да | Да | Да | Да (стандартный CPython, IronPython или Jython) |
Ruby shell | Да | Да | Да (через строковые функции и регулярные выражения) | Да | Да | Да | Да | Да | Да | Да | Да (NetRuby, JRuby, version 1.9/YARV) |
VMS DCL | Да | Да | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
Функции | Обработка исключений | Поиск и замена по переменным | Параллельное присваивание | Variadic functions | Аргументы по умолчаниюs | Именованные параметры | Лямбда-функции | функция eval | Генератор псевдослучайных чисел | Байт-код |
[править] Поиск соответствий строк и имён файлов
Pattern Matching (regular expressions built-in) | Pattern Matching (globbing) | Globbing qualifiers (создание имён файлов по их атрибутам) | Recursive globbing (создание файлов с любого уровня подкаталогов) | |
---|---|---|---|---|
Bourne shell | Нет | Да (*, ?, [...]) | Нет | Нет |
POSIX shell | Нет | Да (*, ?, [...]) | Нет | Нет |
bash (v4.0) | Да | Да (*, ?, [...], {...}) | Нет | Да (**/…) |
csh | Нет | Да | Нет | Нет |
tcsh | Да | Да | Нет | Нет |
Scsh | Да | Да | Нет | Нет |
ksh (ksh93t+) | Да | Да (*, ?, [...]) | Нет | Да (with set -G, no following of symlinks) |
pdksh | Нет | Да | Нет | Нет |
zsh | Да | Да (*, ?, [...], ext'd globbing[25]) |
Да | Да (**/… or ***/… для следования по символическим ссылкам) |
ash | Нет | Да | Нет | Нет |
Windows cmd.exe |
Да (через команду findstr /r) | Да (*, ?) | ? | Нет |
TCC (ранее 4NT) | Ограниченная поддержка | Да (*, ?, [...]) | ? | Да (через FOR /R) |
Windows PowerShell | Да (полная поддержка регулярных выражений)[26] | Да (*, ?, [...]) | ? | ? |
COMMAND.COM | Нет | Да (*, ?) | ? | Нет |
4DOS | Нет | Да (*, ?, [...]) | ? | Да (через FOR /R) |
OS/2 cmd.exe |
Нет | Да (*, ?) | ? | ? |
rc | Нет | Да | Нет | Нет |
BeanShell | Да | ? | ? | ? |
Python shell | Да | Да | Да (через модуль glob) | Да (через модуль glob) |
Ruby shell | Да | Да (через метод Dir.glob()) | ? | Да (через метод Dir.glob()) |
VMS DCL | Нет | Да | Нет | Да (через [SUBDIR…]) |
[править] Межпроцессное взаимодействие
Pipes | Подстановка команд | Подстановка процессов | Подоболочки | TCP/UDP соединения в виде потоков | |
---|---|---|---|---|---|
Bourne shell | байты concurrent |
Да | Нет | Да | Нет |
POSIX shell | байты concurrent |
Да | Нет | Да | Нет |
bash (v4.0) | байты concurrent |
Да | Да (если система поддерживает /dev/fd/<n> или именованные каналы | Да | Да (только клиент) |
csh | байты concurrent |
Да | Нет | Да | Нет |
tcsh | байты concurrent |
Да | Нет | Да | Нет |
Scsh | текст | ? | ? | ? | Да |
ksh (ksh93t+) | байты (может содержать сериализованные объекты, если используется print -C) concurrent |
Да ($(...) and ${<space>...;}) | Да (если система поддерживает /dev/fd/<n> | Да | Да (и поддержка SCTP, client only) |
pdksh | байты concurrent |
Да | Нет | Да | Нет |
zsh | байты concurrent |
Да | Да | Да | Да (клиент и сервер, но только TCP) |
ash | байты concurrent |
Да | Нет | Да | Нет |
Windows cmd.exe |
текст concurrent |
Да (via FOR /F command) | Нет | Да (Backtick: ` in for /f usebackq) | Нет |
TCC (ранее 4NT) | текст | Да (через команду FOR /F) | ? | Ограниченно, через %@execstr[ ] и %@exec[ ] | Нет |
Windows PowerShell | объекты concurrent |
Да | Нет | Да | Да |
COMMAND.COM | текст sequential временные файлы |
Нет | Нет | Нет | Нет |
4DOS | текст sequential временные файлы |
Да (через команду FOR /F) | ? | Ограниченно, через %@execstr[ ] и %@exec[ ] | Нет |
OS/2 cmd.exe |
текст concurrent |
Нет | Нет | ? | Нет |
rc | текст concurrent |
Да | Да (через: <{cmd} если система поддерживает /dev/fd/<n>) | Да | Нет |
BeanShell | не поддерживается | ? | ? | ? | Да |
Python shell | объекты (при использовании IPython+IPipe) | Да | Да (через модуль subprocess) | Да | Да |
Ruby shell | не поддерживается | Да | Да | Да (Backtick: `) | Да |
VMS DCL | текст (через команду PIPE) |
Нет | Нет | Да (spawn) | Да (server TCP only) |
Pipes | Подстановка команд | Подстановка процессов | Подоболочки | TCP/UDP соединения в виде потоков |
[править] Примечания
- ↑ В настоящее время доступно в соответствии под BSD-подобной лицензией через Unix Heritage Society и другие.
- ↑ SVr4 Bourne Shell включает в себя поддержку многобайтовых символов, позже в libc была добавлена поддержка UNICODE в качестве конкретной многобайтовой кодировки
- ↑ IEEE (6 December 2001), [ссылка?]
- ↑ As part of IEEE Std.1003.2-1992 (POSIX.2); integrated into IEEE Std.1003.1 with the 2001 revision.
- ↑ Brian Fox (forwarded by Leonard H. Tower Jr.) (Jun 7 1989). "Bash is in beta release!". gnu.announce. (Google Groups). Проверено 28 октября 2010.
- ↑ Ken Greer (Oct 3 1983). "C shell with command and filename recognition/completion". net.sources. (Google Groups). Проверено 29 декабря 2010.
- ↑ Ron Gomes (Jun 9 1983). "Toronto USENIX Conference Schedule (tentative)". net.usenix. (Google Groups). Проверено 29 декабря 2010.
- ↑ Guy Harris (Oct 10 1983). "csh question". net.flame. (Google Groups). Проверено 29 декабря 2010.
- ↑ SVr4 Korn Shell включает в себя поддержку многобайтовых символов, позже в libc была добавлена поддержка UNICODE в качестве конкретной многобайтовой кодировки
- ↑ 10,0 10,1 Default shell in OpenBSD is ksh (pdksh).
- ↑ Command extensions enabled, or «cmd /x».
- ↑ 12,0 12,1 Windows component — covered by a valid license or Microsoft Windows
- ↑ PASH, a third-party remake, is in development and almost half-finished. Activity seems to have stagnated early 2009.
- ↑ Windows PowerShell is installed with Windows 7, however, it is an optional download for users of Windows Vista or Windows XP.
- ↑ Доступны сторонние повторные реализации, такие как DosBox, Wine и FreeDOS.
- ↑ MS-DOS and Windows component — covered by a valid license for MS-DOS or Microsoft Windows
- ↑ OS/2 component — covered by a valid license for OS/2
- ↑ HP OpenVMS DCL Dictionary. Архивировано из первоисточника 17 сентября 2012. Проверено 23 марта 2009.
- ↑ 19,0 19,1 Many shells in *nix environments change the root user's prompt to '#'.
- ↑ PowerShell exposes more than just the file system as a navigable system: Windows Registry, functions, aliases, variables, certificate store, credential store etc. The location types are extensible through a provider architecture. Common commands will work with any compliant provider
- ↑ 21,0 21,1 Добавлено резидентными программами, такими как DOSKey
- ↑ 22,0 22,1 Доступно в DR-DOS через команду «history» в config.sys; см. эту ссылку
- ↑ Ограниченная поддержка через AUTOEXEC.BAT.
- ↑ 24,0 24,1 24,2 Handled by rio, GNU readline, editline или vrl
- ↑ Zsh offers an almost overwhelming variety of globbing options.
- ↑ PowerShell leverages the full .NET regular expression engine which features named captures, zero-width lookahead/-behind, greedy/non-greedy, character classes, level counting etc.