IO Redirection
IO can be redirected as per the unix shells (sh) with "> file" , ">>file" "< file" , "2> file". Redirection to variables and named ports, "Here Documents" and both text and XML documents are supported.
Input Redirection
Using the syntax
command < file
Input for command is taken from the file "file" (either byte stream or Xml document).Output Redirection
Using the syntax
command > file
Output for command is passed to file "file" (either byte stream or Xml document).Using the syntax
command >> file
Appends the output of command to file, creating file if it does not already exist.Stderr Redirection
Using the syntax
command 2> file
Stderr Output for command is passed to file "file" (either byte stream or Xml document).Using the syntax
command 2>> file
Stderr Output for command is appended to file "file"Here Documents
As per the unix shells, "Here Documents" are supported.A "here Document" is data embedded directly in the script or from the terminal which becomes the standard input of a command.
The syntax is:
command <<EOF Some Text Here until the magic "EOF" is found on a line by its own EOF
The tag "EOF" can be any string. Here documents work as well for text as xml documents.
For example:
xread doc <<EOF <foo> bar </foo> EOF
URL Input
URL's can be used for input redirection any place a file is used.For example
$ xcat < http://test.xmlsh.org/data/books.xml
Also any Internal or Builtin commands that take filenames will take URL's for input files.
For example the above can be rewritten without using redirection
$ xcat http://test.xmlsh.org/data/books.xml
In both cases, the Base URI of the resulting document is preserved.
Note that URL redirection can only be used for input, not for output at this time.
Variable Redirection
A variable can be used for input or output redirection. The syntax is {variable} wherever a file would be used.Example the following two commands are equivalent and send the result of xls into the variable "doc".
$ xls >{doc} $ xls | xread doc
And so are the following
$ xcat <{doc} $ echo $doc | xcat
Variables can be Appended. This will turn a non-sequenced variable into a sequenced variable.
The one exception is that if the variable is initially empty, or contains a single atomic value, AND the output of the command is text then the appending works like appending to a file, that is the strings are concatenated.
Example
$ xls >{doc} $ xls >>{doc}
Now $doc is a sequence of 2 documents. The following would produce equivilent results
$ xls | xread doc $ doc=<[$doc,$doc]>
Text concatenation works when text mode commands are used.
$ echo foo >{port} $ echo bar >>{port} $ echo $port foobar
Port Redirection
Input and output can be explicitly bound to a Named Port. Named ports are specified by preceding the redirection symbol with (port). There are 3 predefined named ports, "input" , "output" , "error"For example to bind the standard input port to "file.xml" and the port named "alternate" to "alternate.xml"
$ command (alternate)<alternate.xml <file.xml
The syntax 2< is synonymous with (error)< and 2> is synonymous with (error)>
For example, the following 2 commands are equivalent.
$ command 2>error.txt $ command (error)>error.txt
See Also BasicSyntax