Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Comparison of command shells
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Inter-process communication== {| class="wikitable sortable" style="width: auto; text-align: center; font-size: smaller;" |- !Shell ![[Pipeline (software)|Pipes]] ![[Command substitution]] ![[Process substitution]] !Subshells ![[Transmission Control Protocol|TCP]]/[[User Datagram Protocol|UDP]] connections as streams ![[#Keystroke stacking|Keystroke stacking]] |- ![[Bourne shell]] |{{yes|bytes concurrent}} |{{yes}} |{{no}} |{{yes}} |{{no}} |{{N/A|N/A}}<ref group="nb" name="xautomation">xautomation and xdotool can be used to generate keystrokes under [[X Window System]]; or a program can be run in a [[pseudoterminal]] to be able to control it (as with the {{mono|[[expect]]}} tool).</ref> |- ![[POSIX]] shell |{{yes|bytes concurrent}} |{{yes}} |{{no}} |{{yes}} |{{no}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |- ![[Bash (Unix shell)|bash]] (v4.0) |{{yes|bytes concurrent}} |{{yes}} |{{yes}}<br>{{small|(if system supports {{mono|/dev/fd/''{{angbr|n}}''}} or named pipes)}} |{{yes}} |{{yes}}<br>{{small|(client only)}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |- ![[C shell|csh]] |{{yes|bytes concurrent}} |{{yes}} |{{no}} |{{yes}} |{{no}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |- ![[tcsh]] |{{yes|bytes concurrent}} |{{yes}} |{{no}} |{{yes}} |{{no}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |- ![[Hamilton C shell]] |{{yes|bytes concurrent}} |{{yes}} |{{no}} |{{yes}} |{{no}} |? |- ![[Scsh]] |{{yes|text}} |? |? |? |{{yes}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |- ![[Korn Shell|ksh]] (ksh93t+) |{{yes|bytes (may contain serialized objects if {{mono|print -C}} is used) concurrent}} |{{yes}}<br>{{small|({{mono|$(...)}} and {{mono|${<space>...;}}})}} |{{yes}}<br>{{small|(if system supports {{mono|/dev/fd/''{{angbr|n}}''}})}} |{{yes}} |{{yes}}<br>{{small|(and SCTP support, client only)}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |- ![[pdksh]] |{{yes|bytes concurrent}} |{{yes}} |{{no}} |{{yes}} |{{no}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |- ![[zsh]] |{{yes|bytes concurrent}} |{{yes}} |{{yes}} |{{yes}} |{{yes}}<br>{{small|(client and server, but only TCP)}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |- ![[Almquist shell|ash]] |{{yes|bytes concurrent}} |{{yes}} |{{no}} |{{yes}} |{{no}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |- ![[CCP (CP/M)|CCP]] |{{no}} |{{no}} |{{no}} |{{no}} |{{no}} |{{no}} |- ![[COMMAND.COM]] |{{yes|text sequential temporary files}} |{{no}} |{{no}} |{{partial}} (only under DR-DOS multitasker via {{mono|COMMAND.COM /T}}) |{{no}} |{{no}} |- !OS/2 [[CMD.EXE]] |{{yes|text concurrent}} |{{no}} |{{no}} |? |{{no}} |{{no}} |- !Windows [[CMD.EXE]] |{{yes|text concurrent}} |{{yes}}<br>{{small|(via {{mono|FOR /F}} command)}} |{{no}} |{{yes}}<br>{{small|(Backtick: {{mono|`}} in {{mono|FOR /F usebackq}})}} |{{no}} |{{no}} |- ![[4DOS]] |{{yes|text sequential temporary files}} |{{yes}}<br>{{small|(via {{mono|FOR /F}} command)}} |? |{{partial}} (via {{mono|%@EXECSTR[]}} and {{mono|%@EXEC[]}}, or via {{mono|SET /M}}, {{mono|ESET /M}} and {{mono|UNSET /M}} and {{mono|%@MASTER[...]}}) |{{no}} |{{yes}} (via {{mono|KEYSTACK}} and {{mono|[[KSTACK.COM|KSTACK]]}})<ref name="4DOS_8.00_HELP">{{cite book |title=4DOS 8.00 online help |title-link=4DOS 8.00 |author-first1=Hardin |author-last1=Brothers |author-first2=Tom |author-last2=Rawson |author-link2=Tom Rawson |author-first3=Rex C. |author-last3=Conn |author-link3=Rex C. Conn |author-first4=Matthias R. |author-last4=Paul |author-first5=Charles E. |author-last5=Dye |author-first6=Luchezar I. |author-last6=Georgiev |date=2002-02-27}}</ref> |- ![[4OS2]] |{{yes|text concurrent}} |? |? |? |{{no}} |{{yes}} (via {{mono|KEYSTACK}}) |- ![[Take Command Console|TCC]] (formerly 4NT) |{{yes|text concurrent}} |{{yes}}<br>{{small|(via {{mono|FOR /F}} command)}} |? |{{partial}} (via {{mono|%@EXECSTR[]}} and {{mono|%@EXEC[]}}) |{{yes}} (via {{mono|FTP}}, {{mono|TFTP}}, {{mono|FTPS}}, {{mono|SFTP}}, {{mono|HTTP}}, {{mono|HTTPS}} and {{mono|IFTP}}, client only) |{{yes}} (via {{mono|KEYSTACK}}) |- ![[Windows PowerShell|PowerShell]] |{{yes|objects concurrent}} |{{yes}} |{{no}} |{{yes}} |{{yes}} |? |- ![[Rc (Unix shell)|rc]] |{{yes|text concurrent}} |{{yes}} |{{yes}}<br>{{small|(via: {{mono|<{cmd}}} if system supports {{mono|/dev/fd/''{{angbr|n}}''}})}} |{{yes}} |{{no}} |? |- ![[BeanShell]] |{{no|not supported}} |? |? |? |{{yes}} |? |- ![[DIGITAL Command Language|VMS DCL]] |{{yes|text (via {{mono|PIPE}} command)}} |{{yes}} |{{no}} |{{yes}}<br>{{small|(spawn)}} |{{yes}}<br>{{small|(server TCP only)}} |{{no}} |- ![[friendly interactive shell|fish]] |{{yes|bytes concurrent}} |{{yes}} ({{mono|...}}) |{{No|No (broken)<ref>{{cite web|url=https://github.com/fish-shell/fish-shell/issues/1040|title=find a way to make 'psub --fifo' safe from deadlock Β· Issue #1040 Β· fish-shell/fish-shell|website=GitHub}}</ref>}} |{{no}} |{{no}} |{{N/A|N/A}}<ref group="nb" name="xautomation"/> |} ===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.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)