Drush doesn't detect drupal installation under sites sub-directory
You need to add an alias conf file named YOUR_SITE_NAME.aliases.drushrc.php in sites\all folder with that code.

// The site in sites/YOUR_SITE_NAME/ 
$aliases['YOUR_SITE_NAME.local'] = array(
  'uri' =&gt; 'YOUR_SITE_NAME_URI',
  'root' =&gt; '/path/to/drupal_root_folder',
  'path-aliases' =&gt; array(
    '%dump-dir' =&gt; '/tmp'
  ),
);


Then clear cache : drush cache-clear drush. 

Test your alias : @YOUR_SITE_NAME.local status.

To run a command, for the sake of example : @YOUR_SITE_NAME.local mb MODULE_NAME hook1 hook2 --write



UPDATE : in order to create automatically Drush site aliases for many sites, place this code in your aliases.drushrc.php file.  Drush will look for aliases.drushrc.php in the ".drush" folder in your home directory (see this post to get sure where to put this file).

$aliases = array();
$drupal = '/var/www/drupal';

// Automatic alias for each Drupal site
$site = new DirectoryIterator($drupal . '/sites');
while ($site-&gt;valid()) {
  // Look for directories containing a 'settings.php' file
  if ($site-&gt;isDir() &amp;&amp; !$site-&gt;isDot() &amp;&amp; !$site-&gt;isLink()) {
    if (file_exists($site-&gt;getPathname() . '/settings.php')) {
      // Add site alias
      $basename = $site-&gt;getBasename();
      $aliases[$basename] = array(
        'uri' =&gt; $basename,
        'root' =&gt; $drupal,
      );
    }
  }
  $site-&gt;next();
}

// Get all site aliases
$all = array();
foreach ($aliases as $name =&gt; $definition) {
  $all[] = '@' . $name;
}

// 'All' alias group
$aliases['all'] = array(
  'site-list' =&gt; $all,
);


You can also read this : create your own drush aliases. You could even think about managing synchronization between remote and local systems (source).

EDIT : as per ericx comment, consider adding bash-completion. Drush comes with a bash-completion file, drush.completion.sh, which offer alias completions.