# `mix do`
[🔗](https://github.com/elixir-lang/elixir/blob/7ff272706afc522e74121493b7166719985cb099/lib/mix/lib/mix/tasks/do.ex#L5)

Executes the tasks separated by `+`, aborting if any task errors.

Here is an example:

    $ mix do compile --list + deps

The plus should be followed by at least one space before and after.

## Examples

The example below prints the available compilers and
then the list of dependencies.

    $ mix do compile --list + deps

Note that the majority of Mix tasks are only executed once
per invocation. So for example, the following command will
only compile once:

    $ mix do compile + some_other_command + compile

When `compile` is executed again, Mix will notice the task
has already ran, and skip it.

Inside umbrella projects, you can limit recursive tasks
(the ones that run inside every app) by selecting the
desired application via the `--app` flag after `do` and
before the first task:

    $ mix do --app app1 --app app2 compile --list + deps

Elixir versions prior to v1.14 used the comma exclusively
to separate commands:

    $ mix do compile --list, deps

Since then, the `+` operator has been introduced as a
separator for better support on Windows terminals.

## Error handling

If any task in the list of tasks exits with an error,
no subsequent tasks will be run. For instance:

    $ mix do compile + test

If the compilation step fails, the tests will not be
attempted.

## Command line options

  * `--app` - limit recursive tasks to the given apps.
    This option may be given multiple times and must come
    before any of the tasks.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
