Skip to main content

runShell

The runShell action runs a shell command or script on the local machine and evaluates the results, extending Doc Detective's testing capabilities to anything you can script.

For comprehensive options, see the runShell reference.

runShell uses your device's native shell (cmd on Windows, bash on macOS and Linux) to execute the command. The command is executed in the context of the current user.

runShell can evaluate commands in two ways:

  • Exit code: The command's exit code is checked against a list of expected exit codes set in the exitCodes parameter. If the command's exit code exists in the list of expected codes, the step passes. exitCodes defaults to [0]. You can specify non-zero exit codes to test for failure conditions.
  • Output: If the expected output (as set in the output parameter) exists in the command's actual output (both stdout and stderr), the step passes. You can specify expected output as a string or a regular expression. To use a regular expression, the string must start and end with a forward slash, like in /^hello world.*/.

You can also set variables based on the command's output with the setVariables parameter. This is useful for capturing the output of a command and using it in subsequent steps. Each variable is set based on a regular expression match of the command's output.

Examples

Here are a few ways you might use the runShell action:

Run a simple command

This example prints "hello world" to the output.

{
"tests": [
{
"steps": [
{
"action": "runShell",
"description": "Run a simple command.",
"command": "echo 'hello world'"
}
]
}
]
}

Run a command with expected output

This example runs a Docker container and checks the output for a specific string.

{
"tests": [
{
"steps": [
{
"action": "runShell",
"description": "Run a Docker container and check the output.",
"command": "docker run hello-world",
"output": "Hello from Docker!"
}
]
}
]
}

Test a failure condition

This example runs a failing command and checks the exit code. Because the command is expected to fail with an exit code 1, the step passes.

{
"tests": [
{
"steps": [
{
"action": "runShell",
"description": "Run a failing command.",
"command": "false",
"exitCodes": [1]
}
]
}
]
}

Set a variable based on command output

The first step echoes "setup", validates that it outputs a string or one or more characters, and sets a variable based on the output. The next step echoes the variable, then validates that the command output "setup".

{
"tests": [
{
"steps": [
{
"action": "runShell",
"description": "Set a variable based on command output.",
"command": "echo setup",
"output": "/.+/",
"setVariables": [
{
"name": "TEST",
"regex": ".*"
}
]
},
{
"action": "runShell",
"description": "Echo and validate the variable.",
"command": "echo $TEST",
"output": "setup"
}
]
}
]
}