diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index 66b252be651..710a3dd1833 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -86,7 +86,7 @@ export class ExtHostTerminalService extends BaseExtHostTerminalService { this._defaultShell ?? getSystemShellSync(platform.OS, process.env as platform.IProcessEnvironment), process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432'), process.env.windir, - terminalEnvironment.createVariableResolver(this._lastActiveWorkspace, this._variableResolver), + terminalEnvironment.createVariableResolver(this._lastActiveWorkspace, process.env, this._variableResolver), this._logService, useAutomationShell ); @@ -99,7 +99,7 @@ export class ExtHostTerminalService extends BaseExtHostTerminalService { .get(key.substr(key.lastIndexOf('.') + 1)); }; - return terminalEnvironment.getDefaultShellArgs(fetchSetting, useAutomationShell, terminalEnvironment.createVariableResolver(this._lastActiveWorkspace, this._variableResolver), this._logService); + return terminalEnvironment.getDefaultShellArgs(fetchSetting, useAutomationShell, terminalEnvironment.createVariableResolver(this._lastActiveWorkspace, process.env, this._variableResolver), this._logService); } private _registerListeners(): void { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts index 463b4ca43b5..7c692b5672c 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts @@ -340,7 +340,8 @@ export class TerminalProcessManager extends Disposable implements ITerminalProce const baseEnv = await (this._configHelper.config.inheritEnv ? this._terminalProfileResolverService.getShellEnvironment(this.remoteAuthority) : this._terminalInstanceService.getMainProcessParentEnv()); - const variableResolver = terminalEnvironment.createVariableResolver(lastActiveWorkspace, this._configurationResolverService); + // TODO: getShellEnvironment is called twice in this file, plus again when the terminal is resolved + const variableResolver = terminalEnvironment.createVariableResolver(lastActiveWorkspace, await this._terminalProfileResolverService.getShellEnvironment(this.remoteAuthority), this._configurationResolverService); const env = terminalEnvironment.createTerminalEnvironment(shellLaunchConfig, envFromConfigValue, variableResolver, this._productService.version, this._configHelper.config.detectLocale, baseEnv); if (!shellLaunchConfig.strictEnv && !shellLaunchConfig.hideFromUser) { @@ -380,7 +381,7 @@ export class TerminalProcessManager extends Disposable implements ITerminalProce const initialCwd = terminalEnvironment.getCwd( shellLaunchConfig, userHome, - terminalEnvironment.createVariableResolver(lastActiveWorkspace, this._configurationResolverService), + terminalEnvironment.createVariableResolver(lastActiveWorkspace, await this._terminalProfileResolverService.getShellEnvironment(this.remoteAuthority), this._configurationResolverService), activeWorkspaceRootUri, this._configHelper.config.cwd, this._logService diff --git a/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts b/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts index b99e05c00a1..d583a969712 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts @@ -263,11 +263,11 @@ export type TerminalShellArgsSetting = ( export type VariableResolver = (str: string) => string; -export function createVariableResolver(lastActiveWorkspace: IWorkspaceFolder | undefined, configurationResolverService: IConfigurationResolverService | undefined): VariableResolver | undefined { +export function createVariableResolver(lastActiveWorkspace: IWorkspaceFolder | undefined, env: IProcessEnvironment, configurationResolverService: IConfigurationResolverService | undefined): VariableResolver | undefined { if (!configurationResolverService) { return undefined; } - return (str) => configurationResolverService.resolve(lastActiveWorkspace, str); + return (str) => configurationResolverService.resolveWithEnvironment(env, lastActiveWorkspace, str); } /**