code: function _read(state) {
      var ps = (state.onFirstLine) ? state.ps1 : state.ps2;
      state.rl.question(ps, function(str) {
          // Append this input to the current full command string that we'll try and parse
          var commandToParse = state.currentCommand + str;
  
          // Parse the current full command
          var result = CommandParser.parse(commandToParse);
          if (!result.open) {
              // The multi-line command is completed. Send the result to the caller
              return _sendResult(state, null, result.args, result.str);
          }
  
          // We didn't close out the command. We should use the processed string that the command
          // parser wants us to continue with, so append that to the parser with the new-line the
          // user input, as that will now be a part of the command string
          state.currentCommand = result.str + '\n';
  
          // Read a second line of input
          state.onFirstLine = false;
          return _read(state);
      });
  
      // If we started with a line, clear it so subsequent reads don't start with this. `currentLine`
      // is necessary for up-down history replacement
      if (state.currentLine) {
          state.rl.write(state.currentLine);
          state.currentLine = '';
      }
  }
docs: /*!
  Perform the heavy lifting for reading the first and subsequent command lines