======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 < bar 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 [[NamedPorts 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) is synonymous with (error)> For example, the following 2 commands are equivalent. %% $ command 2>error.txt $ command (error)>error.txt %% ---- See Also [[BasicSyntax]]