diff --git a/src/Microsoft.DotNet.Cli.Utils/EnvironmentProvider.cs b/src/Microsoft.DotNet.Cli.Utils/EnvironmentProvider.cs index 65db78e82..b8d85b3b7 100644 --- a/src/Microsoft.DotNet.Cli.Utils/EnvironmentProvider.cs +++ b/src/Microsoft.DotNet.Cli.Utils/EnvironmentProvider.cs @@ -14,6 +14,7 @@ namespace Microsoft.DotNet.Cli.Utils private static char[] s_pathSeparator = new char[] { Path.PathSeparator }; private static char[] s_quote = new char[] { '"' }; private IEnumerable _searchPaths; + private readonly Lazy _userHomeDirectory = new Lazy(() => Environment.GetEnvironmentVariable("HOME") ?? string.Empty); private IEnumerable _executableExtensions; public IEnumerable ExecutableExtensions @@ -45,7 +46,8 @@ namespace Microsoft.DotNet.Cli.Utils searchPaths.AddRange(Environment .GetEnvironmentVariable("PATH") .Split(s_pathSeparator) - .Select(p => p.Trim(s_quote))); + .Select(p => p.Trim(s_quote)) + .Select(p => ExpandTildeSlash(p))); _searchPaths = searchPaths; } @@ -54,6 +56,19 @@ namespace Microsoft.DotNet.Cli.Utils } } + private string ExpandTildeSlash(string path) + { + const string tildeSlash = "~/"; + if (path.StartsWith(tildeSlash, StringComparison.Ordinal) && !string.IsNullOrEmpty(_userHomeDirectory.Value)) + { + return Path.Combine(_userHomeDirectory.Value, path.Substring(tildeSlash.Length)); + } + else + { + return path; + } + } + public EnvironmentProvider( IEnumerable extensionsOverride = null, IEnumerable searchPathsOverride = null)