function drush_main

8.0.x preflight.inc drush_main()
6.x drush.php drush_main()
7.x drush.php drush_main()
3.x drush.php drush_main()
4.x drush.php drush_main()
5.x drush.php drush_main()
master preflight.inc drush_main()

The main Drush function.

  • Parses the command line arguments, configuration files and environment.
  • Prepares and executes a Drupal bootstrap, if possible,
  • Dispatches the given command.

Return value

Whatever the given command returns.

File

./drush.php, line 66
drush is a PHP script implementing a command line shell for Drupal.

Code

function drush_main() {
  $phases = _drush_bootstrap_phases();
  $completed_phases = array();

  $return = '';
  $command_found = FALSE;

  foreach ($phases as $phase) {
    if (drush_bootstrap($phase)) {
      $completed_phases[$phase] = TRUE;
      $command = drush_parse_command();

      // Process a remote command if 'remote-host' option is set.
      if (drush_remote_command()) {
        $command_found = TRUE;
        break;
      }

      if (is_array($command)) {
        if (array_key_exists($command['bootstrap'], $completed_phases) && empty($command['bootstrap_errors'])) {
          drush_log(dt("Found command: !command (commandfile=!commandfile)", array('!command' => $command['command'], '!commandfile' => $command['commandfile'])), 'bootstrap');
          $command_found = TRUE;
          // Dispatch the command(s).
          $return = drush_dispatch($command);

          if (drush_get_context('DRUSH_DEBUG')) {
            drush_print_timers();
          }
          drush_log(dt('Peak memory usage was !peak', array('!peak' => drush_format_size(memory_get_peak_usage()))), 'memory');
          break;
        }
      }
    }
    else {
      break;
    }
  }

  if (!$command_found) {
    // If we reach this point, we have not found either a valid or matching command.
    $args = implode(' ', drush_get_arguments());
    if (isset($command) && is_array($command)) {
      foreach ($command['bootstrap_errors'] as $key => $error) {
        drush_set_error($key, $error);
      }
      drush_set_error('DRUSH_COMMAND_NOT_EXECUTABLE', dt("The drush command '!args' could not be executed.", array('!args' => $args)));
    }
    elseif (!empty($args)) {
      drush_set_error('DRUSH_COMMAND_NOT_FOUND', dt("The drush command '!args' could not be found.", array('!args' => $args)));
    }
    else {
      // This can occur if we get an error during _drush_bootstrap_drush_validate();
      drush_set_error('DRUSH_COULD_NOT_EXECUTE', dt("Drush could not execute."));
    }
  }

  // We set this context to let the shutdown function know we reached the end of drush_main();
  drush_set_context("DRUSH_EXECUTION_COMPLETED", TRUE);

  // After this point the drush_shutdown function will run,
  // exiting with the correct exit code.
  return $return;
}