private static ICommand NewCommand(string input, Dictionary <string, string> variables, bool isFirst) { string[] words = input.Trim().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if ((isFirst == false) && (words.Length != 1)) { throw new ArgumentException("Incorrect arguments in \"" + input.Trim() + "\""); } List <string> arguments = new List <string>(); string command = words[0].ToLower(); for (int i = 1; i < words.Length; i++) { arguments.Add(words[i]); } if (arguments.Count > 0) { arguments = ToArguments(arguments, variables); } switch (command) { case "exit": { Exit exit = new Exit(arguments); return(exit); } case "echo": { Echo echo = new Echo(arguments); return(echo); } case "pwd": { Pwd pwd = new Pwd(arguments); return(pwd); } case "cat": { Cat cat = new Cat(arguments); return(cat); } case "wc": { Wc wc = new Wc(arguments); return(wc); } default: { SystemShell processStart = new SystemShell(words.ToList()); return(processStart); } } }