View Source Mix.Shell behaviour (Mix v1.18.0-dev)

Defines Mix.Shell contract.

Summary

Callbacks

Executes the given command and returns its exit status.

Executes the given command and returns its exit status.

Prints the given ANSI error to the shell.

Prints the given ANSI message to the shell.

Prints the current application to the shell if it was not printed yet.

Prompts the user for input.

Prompts the user for confirmation.

Prompts the user for confirmation.

Functions

Executes the given command and invokes the callback for the streamed response.

Returns the printable app name.

Callbacks

cmd(command)

@callback cmd(command :: String.t()) :: integer()

Executes the given command and returns its exit status.

Shortcut for cmd/2 with empty options.

cmd(command, options)

@callback cmd(command :: String.t(), options :: keyword()) :: integer()

Executes the given command and returns its exit status.

Options

This callback should support the following options:

  • :print_app - when false, does not print the app name when the command outputs something

  • :stderr_to_stdout - when false, does not redirect stderr to stdout

  • :quiet - when true, do not print the command output

  • :env - environment options to the executed command

  • :cd (since v1.11.0) - the directory to run the command in

All the built-in shells support these.

error(message)

@callback error(message :: IO.ANSI.ansidata()) :: :ok

Prints the given ANSI error to the shell.

info(message)

@callback info(message :: IO.ANSI.ansidata()) :: :ok

Prints the given ANSI message to the shell.

print_app()

@callback print_app() :: :ok

Prints the current application to the shell if it was not printed yet.

prompt(message)

@callback prompt(message :: binary()) :: binary()

Prompts the user for input.

yes?(message)

@callback yes?(message :: binary()) :: boolean()

Prompts the user for confirmation.

Shortcut for yes?/2 with empty options.

yes?(message, options)

@callback yes?(message :: binary(), options :: keyword()) :: boolean()

Prompts the user for confirmation.

Options

  • :default - :yes or :no (the default is :yes)

Functions

cmd(command, options \\ [], callback)

@spec cmd(String.t() | {String.t(), [String.t()]}, keyword(), (binary() -> term())) ::
  exit_status :: non_neg_integer()

Executes the given command and invokes the callback for the streamed response.

command is either a string, to be executed as a System.shell/2 command, or a {executable, args} to be executed via System.cmd/3.

callback takes the output data of the command. Its return value is ignored.

This function is most commonly used by Mix.Shell implementations but can also be invoked directly.

Options

  • :cd (since v1.11.0) - the directory to run the command in

  • :stderr_to_stdout - redirects stderr to stdout, defaults to true, unless use_stdio is set to false

  • :use_stdio - controls whether the command should use stdin / stdout / stdrr, defaults to true

  • :env - a list of environment variables, defaults to []

  • :quiet - overrides the callback to no-op

printable_app_name()

@spec printable_app_name() :: atom() | nil

Returns the printable app name.

This function returns the current application name, but only if the application name should be printed.

Calling this function automatically toggles its value to false until the current project is re-entered. The goal is to avoid printing the application name multiple times.