Redirection (computing): Difference between revisions

Content deleted Content added
Piping: reference
Filled in 4 bare reference(s) with reFill 2
Line 11:
In [[computing]], '''redirection''' is a form of [[interprocess communication]], and is a function common to most [[command-line interpreter]]s, including the various [[Unix shell]]s that can redirect [[standard streams]] to user-specified locations.
 
In [[Unix-like]] operating systems, programs do redirection with the {{mono|[[dup2]](2)}} [[system call]], or its less-flexible but higher-level [[Standard streams|stdio]] analogues, {{mono|[[freopen]](3)}} and {{mono|[[popen]](3)}}.<ref>https://www.gnu.org/software/libc/manual/html_mono/libc.html{{bare URL inline}}</ref>
 
==Redirecting standard input and standard output==
Line 48:
Programs can be run together such that one program reads the output from another with no need for an explicit intermediate file. <syntaxhighlight lang="bash" inline>command1 | command2</syntaxhighlight> executes {{mono|command1}}, using its output as the input for {{mono|command2}} (commonly called [[Pipeline (Unix)|piping]], with the "<code>|</code>" character being known as the "pipe").
 
The two programs performing the commands may run in parallel with the only storage space being working buffers (Linux allows up to 64K for each buffer) plus whatever work space each command's processing requires. For example, a "sort" command is unable to produce any output until all input records have been read, as the very last record received just might turn out to be first in sorted order. Dr. Alexia Massalin's experimental operating system, [[Synthesis kernel#Massalin.27s Synthesis kernel|Synthesis]], would adjust the priority of each task as they ran according to the fullness of their input and output buffers.<ref>{{Cite web|url=https://lwn.net/Articles/270081/|title=KHB: Synthesis: An Efficient Implementation of Fundamental Operating Systems Services|website=lwn.net}}</ref>
 
This produces the same end result as using two redirects and a temporary file, as in:
Line 77:
 
==Redirecting to and from the standard file handles==
In [[Unix shell]]s derived from the original [[Bourne shell]], the first two actions can be further modified by placing a number (the [[file descriptor]]) immediately before the [[token (parser)|character]]; this will affect which stream is used for the redirection.<ref>{{Cite web|url=https://www.redhat.com/sysadmin/redirect-shell-command-script-output|title=How to redirect shell command output|first=Roberto|last=Nozaki|date=April 21, 2022|website=www.redhat.com}}</ref> The Unix standard I/O streams are:<ref>{{Cite web|url=https://www.gnu.org/software/bash/manual/html_node/Redirections.html|title=Redirections (Bash Reference Manual)|website=www.gnu.org}}</ref>
 
{| class="wikitable"
Line 112:
 
==Chained pipelines==
The redirection and piping tokens can be chained together to create complex commands. For example, <syntaxhighlight lang="bash" inline>sort infile | uniq -c | sort -n > outfile</syntaxhighlight> sorts the lines of {{mono|infile}} in lexicographical order, writes unique lines prefixed by the number of occurrences, sorts the resultant output numerically, and places the final output in {{mono|outfile}}.<ref>{{Cite web|url=https://www.linux.org/threads/piping-and-redirecting-output-in-the-linux-terminal.43745/|title=Piping and Redirecting Output in the Linux Terminal |website=Linux.org}}</ref> This type of construction is used very commonly in [[shell script]]s and [[batch file]]s.
 
==Redirect to multiple outputs==