Сравнение командных оболочек

Материал из Викиреальностя
Перейти к: навигация, поиск

Командная оболочка — это компьютерная программа с интерфейсом командной строки операционной системы.

Содержание

[править] Общие характеристики

Обычное окружение (или среда) Обычно вызывается Появление Платформо-независимое 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 соединения в виде потоков

[править] Примечания

  1. В настоящее время доступно в соответствии под BSD-подобной лицензией через Unix Heritage Society и другие.
  2. SVr4 Bourne Shell включает в себя поддержку многобайтовых символов, позже в libc была добавлена поддержка UNICODE в качестве конкретной многобайтовой кодировки
  3. IEEE (6 December 2001), [ссылка?] 
  4. As part of IEEE Std.1003.2-1992 (POSIX.2); integrated into IEEE Std.1003.1 with the 2001 revision.
  5. Brian Fox (forwarded by Leonard H. Tower Jr.) (Jun 7 1989). "Bash is in beta release!". gnu.announce. (Google Groups). Проверено 28 октября 2010.
  6. Ken Greer (Oct 3 1983). "C shell with command and filename recognition/completion". net.sources. (Google Groups). Проверено 29 декабря 2010.
  7. Ron Gomes (Jun 9 1983). "Toronto USENIX Conference Schedule (tentative)". net.usenix. (Google Groups). Проверено 29 декабря 2010.
  8. Guy Harris (Oct 10 1983). "csh question". net.flame. (Google Groups). Проверено 29 декабря 2010.
  9. SVr4 Korn Shell включает в себя поддержку многобайтовых символов, позже в libc была добавлена поддержка UNICODE в качестве конкретной многобайтовой кодировки
  10. 10,0 10,1 Default shell in OpenBSD is ksh (pdksh).
  11. Command extensions enabled, or «cmd /x».
  12. 12,0 12,1 Windows component — covered by a valid license or Microsoft Windows
  13. PASH, a third-party remake, is in development and almost half-finished. Activity seems to have stagnated early 2009.
  14. Windows PowerShell is installed with Windows 7, however, it is an optional download for users of Windows Vista or Windows XP.
  15. Доступны сторонние повторные реализации, такие как DosBox, Wine и FreeDOS.
  16. MS-DOS and Windows component — covered by a valid license for MS-DOS or Microsoft Windows
  17. OS/2 component — covered by a valid license for OS/2
  18. HP OpenVMS DCL Dictionary. Архивировано из первоисточника 17 сентября 2012. Проверено 23 марта 2009.
  19. 19,0 19,1 Many shells in *nix environments change the root user's prompt to '#'.
  20. 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. 21,0 21,1 Добавлено резидентными программами, такими как DOSKey
  22. 22,0 22,1 Доступно в DR-DOS через команду «history» в config.sys; см. эту ссылку
  23. Ограниченная поддержка через AUTOEXEC.BAT.
  24. 24,0 24,1 24,2 Handled by rio, GNU readline, editline или vrl
  25. Zsh offers an almost overwhelming variety of globbing options.
  26. PowerShell leverages the full .NET regular expression engine which features named captures, zero-width lookahead/-behind, greedy/non-greedy, character classes, level counting etc.

[править] Ссылки