try
Command Reference
Description
try catch finally.
The try command models the familiar try/catch/finally control structure. The command lets you run an ad hoc or defined command and optionally run a different one if the first one fails and yet another one after the first one has finished.
The try command will attempt to execute a command. Commands can be one of these things:
- executable: Run the specified executable
- script: Evaluate the script using the specified executable
- scriptfile: Run the script file using the specified executable
- command: Run the defined command in the specified module
The "catch" and "finally" actions are similarly specified but are prefixed with that corresponding name (eg, catchexecutable, catchscript, finallyexecutable, finallyscript).
If an error occurs during the execution of the command and no catch command is specified then try will exit with an error. If a catch command is specified, the try command will exit normally (assuming the catch command or finally one does not error too).
static: This command can be run outside of an object context.
Usage
ctl -m logicutil -c try [-argline <>] [-catchargline <>] [-catchcommand <>] [-catchexecutable <>] [-catchscript <>] [-catchscriptfile <>] [-command <>] [-executable <>] [-finallyargline <>] [-finallycommand <>] [-finallyexecutable <>] [-finallyscript <>] [-finallyscriptfile <>] [-output <>] [-script <>] [-scriptfile <>]
Options
Options are grouped into roughly three parts: the action to try, the catch action and the finally action.
try [try options] [catch options] [finally options]
Ad hoc commands are supported via the executable and script and scriptfile options. You can run a defined command via the command options. Defined commands are specified using type#command (eg, netutil#listening).
If a script or scriptfile is specified but no executable, the command will default executable to sh on unix or cmd.exe on windows.
Option | Description | Type | Default |
---|---|---|---|
argline | The tryargline to try. | string | |
catchargline | The catch argline. | string | |
catchcommand | The catch CTL command. | string | |
catchexecutable | The catch executable. | string | |
catchscript | The catch script. | string | |
catchscriptfile | The catch scriptfile. | string | |
command | The CTL command to try. | string | |
executable | The executable to try. | string | |
finallyargline | The finally argline. | string | |
finallycommand | The finallycommand CTL command. | string | |
finallyexecutable | The finally executable. | string | |
finallyscript | The finally script. | string | |
finallyscriptfile | The finally scriptfile. | string | |
output | Direct try output to file. | string | |
script | The script to try. | string | |
scriptfile | The scriptfile to try. | string |
Examples
Execute an inline shell script. Echos the string "hello" to the console:
ctl -p demo -m logicutil -c try -- -executable /bin/sh -script "echo hello"
output: hello
Execute a script file. Here's a script called "/tmp/hello.sh" that echos the argument string specified via the "-argline" option:
#!/bin/sh echo "$@"
Use the "scriptfile" option. The "argline" argument will be passed as the arguments to the script.
ctl -p demo -m logicutil -c try -- -executable /bin/sh -scriptfile /tmp/hello.sh -argline hello
output: hello
Catch errors with a catch action. A catch action is specified similar to the one being tried. Here's an example that intentionally fails by causing the script to exit non-zero.
ctl -p demo -m logicutil -c try -- \ -executable /bin/sh -script "exit 1" -catchexecutable /bin/sh -catchscript "echo caught the error"
output: caught the error
Errors that are caught prevent the try command from exiting with an error. The command will exit with a 0 exit code. (eg, $? = 0)
A finally action will run no matter if an error is occurs or not
ctl -p demo -m logicutil -c try -- \ -executable /bin/sh -script "exit 1" -catchexecutable /bin/sh -script "echo caught the error" \ -finallyexecutable /bin/sh -finallyscript "echo caught the error"
output:
Caught exception: shell-exec returned: 1 caught the error finally
Commands defined in modules can also be called. Commands are referenced using this notation: typename#commandname.
Here's an example that calls the available command in the fileutil module.
ctl -p demo -m logicutil -c try -- -command fileutil#available -argline "-file /etc/motd"
output: true
Here available is run again but this time referring to a file that does not exist.
ctl -p demo -m logicutil -c try -- \ -command fileutil#available -argline "-file /tmp/bogus -failonerror" -catchscript "echo file was bogus"
output:
Caught exception: The following error occurred while executing this line: /Users/alexh/ctier/ctl/modules/fileutil/commands/available.xml:26: file not found: /tmp/bogus file was bogus