protected override Variable Evaluate(ParsingScript script) { if (script.Substr().StartsWith(" ..")) { script.Forward(); } string newDir = Utils.GetItem(script).AsString(); try { if (newDir == "..") { string pwd = Directory.GetCurrentDirectory(); DirectoryInfo parent = Directory.GetParent(pwd); if (parent == null) { throw new ArgumentException("No parent exists."); } newDir = parent.FullName; } if (newDir.Length == 0) { newDir = Environment.GetEnvironmentVariable("HOME"); } Directory.SetCurrentDirectory(newDir); newDir = Directory.GetCurrentDirectory(); } catch (Exception exc) { throw new ArgumentException("Couldn't change directory: " + exc.Message); } return(new Variable(newDir)); }