| File: ShellShim\LinuxEnvironmentPath.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.Configurer; using Microsoft.Extensions.EnvironmentAbstractions; namespace Microsoft.DotNet.Cli.ShellShim; internal class LinuxEnvironmentPath : IEnvironmentPath { private readonly IFile _fileSystem; private readonly IEnvironmentProvider _environmentProvider; private readonly IReporter _reporter; private const string PathName = "PATH"; private readonly BashPathUnderHomeDirectory _packageExecutablePath; internal static readonly string DotnetCliToolsProfilePath = Environment.GetEnvironmentVariable("DOTNET_CLI_TEST_LINUX_PROFILED_PATH") ?? @"/etc/profile.d/dotnet-cli-tools-bin-path.sh"; internal LinuxEnvironmentPath( BashPathUnderHomeDirectory packageExecutablePath, IReporter reporter, IEnvironmentProvider environmentProvider, IFile fileSystem) { _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); _environmentProvider = environmentProvider ?? throw new ArgumentNullException(nameof(environmentProvider)); _reporter = reporter ?? throw new ArgumentNullException(nameof(reporter)); _packageExecutablePath = packageExecutablePath; } public void AddPackageExecutablePathToUserPath() { if (PackageExecutablePathExists()) { return; } var script = $"export PATH=\"$PATH:{_packageExecutablePath.PathWithDollar}\""; _fileSystem.WriteAllText(DotnetCliToolsProfilePath, script); } private bool PackageExecutablePathExists() { var value = _environmentProvider.GetEnvironmentVariable(PathName); if (value == null) { return false; } return value .Split(':') .Any(p => p == _packageExecutablePath.Path || p == _packageExecutablePath.PathWithTilde); } public void PrintAddPathInstructionIfPathDoesNotExist() { if (!PackageExecutablePathExists()) { if (_fileSystem.Exists(DotnetCliToolsProfilePath)) { _reporter.WriteLine( CliStrings.EnvironmentPathLinuxNeedLogout); } else { // similar to https://code.visualstudio.com/docs/setup/mac _reporter.WriteLine( string.Format( CliStrings.EnvironmentPathLinuxManualInstructions, _packageExecutablePath.Path)); } } } }