Copy stdin to stdout

From Rosetta Code
Copy stdin to stdout is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Create an executable file that copies stdin to stdout, or else a script that does so through the invocation of an interpreter at the command line.

ALGOL 68[edit]

Works with: ALGOL 68G version Any - tested with release 2.8.3.win32
BEGIN
BOOL at eof := FALSE;
# set the EOF handler for stand in to a procedure that sets "at eof" to true #
# and returns true so processing can continue #
on logical file end( stand in, ( REF FILE f )BOOL: at eof := TRUE );
# copy stand in to stand out #
WHILE STRING line; read( ( line, newline ) ); NOT at eof DO write( ( line, newline ) ) OD
END

AWK[edit]

Using the awk interpreter, the following command uses the pattern // (which matches anything) with the default action (which is to print the current line) and so copy lines from stdin to stdut.

awk "//"

C[edit]

 
#include <stdio.h>
 
int main(){
char c;
while ( (c=getchar()) != EOF ){
putchar(c);
}
return 0;
}
 

Go[edit]

package main
 
import (
"bufio"
"io"
"os"
)
 
func main() {
r := bufio.NewReader(os.Stdin)
w := bufio.NewWriter(os.Stdout)
for {
b, err := r.ReadByte()
if err == io.EOF {
return
}
w.WriteByte(b)
w.Flush()
}
}

Mercury[edit]

 
 
:- module stdin_to_stdout.
:- interface.
 
:- import_module io.
 
:- pred main(io::di, io::uo) is det.
 
%-----------------------------------------------------------------------------%
%-----------------------------------------------------------------------------%
 
:- implementation.
 
:- import_module char.
:- import_module list.
:- import_module string.
 
%-----------------------------------------------------------------------------%
 
 
 
main(!IO) :-
io.read_line_as_string(Result, !IO),
(
Result = ok(Line),
io.write_string(Line, !IO),
main(!IO)
 ;
Result = eof
 ;
Result = error(Error),
io.error_message(Error, Message),
io.input_stream_name(StreamName, !IO),
io.progname("stdin_to_stdout", ProgName, !IO),
io.write_strings([
ProgName, ": ",
"error reading from `", StreamName, "': \n\t",
Message, "\n"
], !IO)
).
 
%-----------------------------------------------------------------------------%
 

Perl[edit]

 
perl -pe ''
 

Perl 6[edit]

When invoked at a command line: Slightly less magical than Perl / sed. The p flag means automatically print each line of output to STDOUT. The e flag means execute what follows inside quotes. ".lines" reads lines from the assigned pipe (file handle), STDIN by default.

perl6 -pe'.lines'

When invoked from a file: Lines are auto-chomped, so need to re-add newlines (hence .say rather than .print)

.say for lines

Prolog[edit]

 
%File: stdin_to_stdout.pl
:- initialization(main).
 
main :- repeat,
get_char(X),
put_char(X),
X == end_of_file,
fail.
 

Invocation at the command line (with Swi-prolog):

 
swipl stdin_to_stdout.pl
 

Python[edit]

python -c 'import sys; sys.stdout.write(sys.stdin.read())'

REXX[edit]

In the REXX language,   the   STDIN   (default input stream)   is normally the console,   and the   STDOUT   (default output stream)   is normally the console.   So for REXX, this task equates to copying data from the console to itself.

/*REXX pgm copies data from STDIN──►STDOUT (default input stream──►default output stream*/
 
do while chars()\==0 /*repeat loop until no more characters.*/
call charin , x /*read a char from the input stream. */
call charout , x /*write " " " " output " */
end /*while*/ /*stick a fork in it, we're all done. */

Scheme[edit]

 
(do ((c (read-char) (read-char)))
((eof-object? c) 'done)
(display c))
 

sed[edit]

 
sed -e ''
 

zkl[edit]

zkl --eval "File.stdout.write(File.stdin.read())"