Commandline Redirection > & >>

Unix commands usually return results to the screen. Those results can be directed into a file instead, with > or >>. The first overwrites the file, the second appends to it.
ls > files_of_filenames.txt
ls >> files_of_filenames.txt

NOTE: > and >> are short forms of 1> and 1>>. 1 should be thought of as meaning stdout (Standard Output), which is almost always set to the terminal you’re typing commands on until you redirect it like this. There is also 2> and 2>> which do the same thing for stderr (Standard Error). If you don’t have permission, an error telling you so will print to stderr

To list the contents of the current folder, type the command ls. LS (in lower case letters) is short for “list” and will list the files in the current directory (like DIR on Windows).

ONE FINAL NOTE: >& 1 represents the setting where stdout is pointing.
ls 1> list.txt 2> list_errors.txt (Normal output in a file, errors in another)
ls 1> list.txt 2>& 1 (this will combine everything into one file)

This means a command like this directs to two files:
ls *  > outB.txt 2>& 1 1>outA.txt
stdout goes to outA.txt
stderr goes to outB.txt
First it sends stdout to outB.txt with > then directs stderr to where stdout is going, then redirects stdout again to outA.txt with 1> and even though there’s not reason to do this exact thing, there may be reasons in the flow of programs that “compile” pieces of a command into a final command, and this could be the result. Usually you’ll see 2>&1 with no spaces, however, I’ve added spaces to both prove it works, and to illustrate that 1 is an argument to 2>& and not just part of it.

Redirecting INPUTS
Also worth noting, there is a stdin (Standard Input) which is 0< and generally comes from the keyboard or can be from a file.
perl in-test.pl < list_of_inputs.txt

This is very different than command line arguments. When a script asks the user to answer a question interactively, a line from the file is read. In this way, a programmer can create a file to simulate a series of user inputs and feed it to stdin for testing.

In this example I wrote a perl script called in-test.pl which asks for 9 inputs in a row and prints them out once the users (or file) provides a line return (user hits enter). Here’s the script, just save it as in-test.pl and run perl with this file as it’s only argument as shown above. Even though the only argument to perl is in-test.pl and there are no arguments to the script either. The rest of the line is providing a series of inputs to the scirpt. The difference between an argument and an input is that arguments are all present at the start of the script, however, inputs are not present until the script asks for each of them.

in-test.pl

#!/usr/bin/perl
print “Input Test Script\n”;

foreach my $idx (1..9){
$input = <stdin>;
chomp $input; #removes the line return if it’s there
print “input($idx): $input-\n”;
}

list_of_inputs.txt

First Line of File.
Hi 2
Bye 3
More makes 4

Advertisements

Netflix is dead… long live Netflix.

Netflix – Making the right moves

What was that. Oh, a speed bump. DVDs via Netflix were a big improvement compared to Blockbuster rentals, but not compared to Streaming via Netflix. Hurray for the future of Netflix!

What could make it better? The option to download and watch where there’s slow or no connection. Seriously.

Continue reading

Apple’s Tablet is coming

With all these rumors, it’s a pretty sure thing. Some of the details are not certain, but some are. It should be a 10.1″ iPhone type device with a surprising interface. It might have a camera, or GPS, or compass. It might even respond to a stylus or Wacom pen.

Apple always makes great products by making great software for it. Being larger than an iPhone means changes that we can’t predict, so we won’t know what they are like until we see it.