Basic Syntax
xmlsh is derived from a similar syntax as the unix shells (see Philosophy) . If you are familiar with any of these shell languages (sh,bash,ksh,zsh) you should be right at home. An attempt was made to stay very close to the sh syntax where reasonable, but not all subtlies or features of the unix shells are implemented. In order to accomidate native XML types and pipelines some deviations and extensions were necessary. Lastly, as an implementation issue, xmlsh is implemented in java using the javacc compiler for parsing. This made support for some of the syntax and features of the C based shells difficult or impossible. Future work may try to tighten up these issues.
Invocation
xmlsh can run in 2 modes, interactive and batch. In interactive mode, a prompt ("$ ") is displayed and in batch mode there is no prompt. Otherwise they are identical. Running xmlsh with no arguments starts an interactive shell. Running with an argument runs in batch mode and invokes the given script.
You can run an xmlsh script by passing it as the first argument, followed by any script arguments
xmlsh myscript.xsh arg1 arg2
For details on xmlsh invocation and parameters see xmlsh command
Environment
On invocation, xmlsh inherits the process environment of the caller. In particular this includes- Current Directory
- Environment variables
- Standard ports ( input/output/error )
The shell itself maintains additional environment which is passed to all subshells, but not to external (sub process) commands.
- Namespaces, including the default namespace (See Namespaces)
- Declared functions (See SyntaxFunction )
- imported modules and packages (See Modules)
- Shell variables (Environment variables and internal shell variables) (See BuiltinVariables)
- Positional parameters ($1 ... $n)
- Shell Options (-v, -x ...)
Running Commands / Basic Syntax
On startup, xmlsh reads the standard input (interactive mode) or the script file (batch mode), parses one command at a time and executes it. The following steps are performed
- Parse statement. Statements are parsed using the Core Syntax.
- Expand variables. Variable expansion is performed. See Variables and CoreSyntax.
- Variable assignment. Prefix variable assignment is performed. Variables and CoreSyntax.
- IO Redirection. IO redirection (input,output, here documents) CommandRedirect and CoreSyntax.
- Command execution. Commands are executed. CommandExecution
- Exceptions raised can be handled with a try/catch block.
After the command is executed, then the process repeats.