From d5e733e38cad8478c4fc84ac54c72dedc3854f03 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Tue, 15 Nov 2022 11:23:37 -0800 Subject: [PATCH 1/6] Change `exec` from alias to function to handle arbitrary args --- .../engine/InitialSessionState.cs | 15 +++++++++++---- .../Microsoft.PowerShell.Core/Exec.Tests.ps1 | 11 ++++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/System.Management.Automation/engine/InitialSessionState.cs b/src/System.Management.Automation/engine/InitialSessionState.cs index e75ca018f8e..e7cc7d802cc 100644 --- a/src/System.Management.Automation/engine/InitialSessionState.cs +++ b/src/System.Management.Automation/engine/InitialSessionState.cs @@ -4072,6 +4072,13 @@ internal static string GetClearHostFunctionText() } } + internal static string GetExecFunctionText() + { + return @" +Switch-Process -WithCommand $args +"; + } + /// /// This is the default function to use for man/help. It uses /// splatting to pass in the parameters. @@ -4677,10 +4684,6 @@ internal static SessionStateAliasEntry[] BuiltInAliases new SessionStateAliasEntry("sls", "Select-String"), }; -#if UNIX - builtInAliases.Add(new SessionStateAliasEntry("exec", "Switch-Process")); -#endif - return builtInAliases.ToArray(); } } @@ -4709,6 +4712,10 @@ internal static SessionStateAliasEntry[] BuiltInAliases SessionStateFunctionEntry.GetDelayParsedFunctionEntry("help", GetHelpPagingFunctionText(), isProductCode: true, languageMode: systemLanguageMode), SessionStateFunctionEntry.GetDelayParsedFunctionEntry("prompt", DefaultPromptFunctionText, isProductCode: true, languageMode: systemLanguageMode), +#if UNIX + SessionStateFunctionEntry.GetDelayParsedFunctionEntry("exec", GetExecFunctionText(), isProductCode: true, languageMode: systemLanguageMode), +#endif + // Functions that require full language mode and are trusted SessionStateFunctionEntry.GetDelayParsedFunctionEntry("Clear-Host", GetClearHostFunctionText(), isProductCode: true, languageMode: PSLanguageMode.FullLanguage), SessionStateFunctionEntry.GetDelayParsedFunctionEntry("TabExpansion2", s_tabExpansionFunctionText, isProductCode: true, languageMode: PSLanguageMode.FullLanguage), diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 index 1a1023f0ea4..268f70e3b6d 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 @@ -15,10 +15,10 @@ Describe 'Switch-Process tests for Unix' -Tags 'CI' { $global:PSDefaultParameterValues = $originalDefaultParameterValues } - It 'Exec alias should map to Switch-Process' { + It 'Exec function should map to Switch-Process' { $alias = Get-Command exec - $alias | Should -BeOfType [System.Management.Automation.AliasInfo] - $alias.Definition | Should -BeExactly 'Switch-Process' + $alias | Should -BeOfType [System.Management.Automation.CommandInfo] + $alias.Definition | Should -Not -BeNullOrEmpty } It 'Exec by itself does nothing' { @@ -53,6 +53,11 @@ Describe 'Switch-Process tests for Unix' -Tags 'CI' { $env = pwsh -noprofile -outputformat text -command { $env:TEST_FOO='my test = value'; Switch-Process bash -c 'echo $TEST_FOO' } $env | Should -BeExactly 'my test = value' } + + It 'The command can include a -w paramter' { + $out = pwsh -noprofile -outputformat text -command { exec /bin/echo 1 -w 2 } + $out | Should -BeExactly '1 -w 2' + } } Describe 'Switch-Process for Windows' -Tag 'CI' { From abfdb3ed9f06725e19f797c2d1d56870dc2764e6 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Tue, 15 Nov 2022 13:37:44 -0800 Subject: [PATCH 2/6] remove `exec` from alias testsy --- test/powershell/engine/Basic/DefaultCommands.Tests.ps1 | 1 - 1 file changed, 1 deletion(-) diff --git a/test/powershell/engine/Basic/DefaultCommands.Tests.ps1 b/test/powershell/engine/Basic/DefaultCommands.Tests.ps1 index bdcd5af0000..f5fc66748a7 100644 --- a/test/powershell/engine/Basic/DefaultCommands.Tests.ps1 +++ b/test/powershell/engine/Basic/DefaultCommands.Tests.ps1 @@ -58,7 +58,6 @@ Describe "Verify approved aliases list" -Tags "CI" { "Alias", "epsn", "Export-PSSession", $($FullCLR ), "", "", "" "Alias", "erase", "Remove-Item", $($FullCLR -or $CoreWindows -or $CoreUnix), "", "", "" "Alias", "etsn", "Enter-PSSession", $($FullCLR -or $CoreWindows -or $CoreUnix), "", "", "" -"Alias", "exec", "Switch-Process", $( $CoreUnix), "", "", "" "Alias", "exsn", "Exit-PSSession", $($FullCLR -or $CoreWindows -or $CoreUnix), "", "", "" "Alias", "fc", "Format-Custom", $($FullCLR -or $CoreWindows -or $CoreUnix), "ReadOnly", "", "" "Alias", "fhx", "Format-Hex", $($FullCLR -or $CoreWindows -or $CoreUnix), "", "", "" From 1e03a66c8e1d98dd09ff4686a844da9f9e60e08a Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Tue, 15 Nov 2022 15:29:30 -0800 Subject: [PATCH 3/6] Update test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 --- .../powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 index 268f70e3b6d..6f4c95a480a 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 @@ -54,7 +54,7 @@ Describe 'Switch-Process tests for Unix' -Tags 'CI' { $env | Should -BeExactly 'my test = value' } - It 'The command can include a -w paramter' { + It 'The command can include a -w parameter' { $out = pwsh -noprofile -outputformat text -command { exec /bin/echo 1 -w 2 } $out | Should -BeExactly '1 -w 2' } From e5b5ad48c79da3f238a2f7977e778097c7e4fd86 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 15 Nov 2022 17:55:54 -0800 Subject: [PATCH 4/6] Update src/System.Management.Automation/engine/InitialSessionState.cs --- src/System.Management.Automation/engine/InitialSessionState.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/System.Management.Automation/engine/InitialSessionState.cs b/src/System.Management.Automation/engine/InitialSessionState.cs index e7cc7d802cc..81f64474231 100644 --- a/src/System.Management.Automation/engine/InitialSessionState.cs +++ b/src/System.Management.Automation/engine/InitialSessionState.cs @@ -4075,7 +4075,7 @@ internal static string GetClearHostFunctionText() internal static string GetExecFunctionText() { return @" -Switch-Process -WithCommand $args +Switch-Process -WithCommand $args "; } From be470a75a4b91d16373005c5f576d335f3d06476 Mon Sep 17 00:00:00 2001 From: Steve Lee Date: Wed, 16 Nov 2022 16:10:25 -0800 Subject: [PATCH 5/6] address Ilya's feedback --- src/System.Management.Automation/engine/InitialSessionState.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/System.Management.Automation/engine/InitialSessionState.cs b/src/System.Management.Automation/engine/InitialSessionState.cs index 81f64474231..32969ecde28 100644 --- a/src/System.Management.Automation/engine/InitialSessionState.cs +++ b/src/System.Management.Automation/engine/InitialSessionState.cs @@ -4072,12 +4072,14 @@ internal static string GetClearHostFunctionText() } } +#if UNIX internal static string GetExecFunctionText() { return @" Switch-Process -WithCommand $args "; } +#endif /// /// This is the default function to use for man/help. It uses From f028f5bea0b64a4da3f9bee361bbde6dff1c8b23 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Wed, 16 Nov 2022 20:51:28 -0800 Subject: [PATCH 6/6] rename variable --- .../Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 b/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 index 6f4c95a480a..ad89c847811 100644 --- a/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 +++ b/test/powershell/Modules/Microsoft.PowerShell.Core/Exec.Tests.ps1 @@ -16,9 +16,9 @@ Describe 'Switch-Process tests for Unix' -Tags 'CI' { } It 'Exec function should map to Switch-Process' { - $alias = Get-Command exec - $alias | Should -BeOfType [System.Management.Automation.CommandInfo] - $alias.Definition | Should -Not -BeNullOrEmpty + $func = Get-Command exec + $func | Should -BeOfType [System.Management.Automation.CommandInfo] + $func.Definition | Should -Not -BeNullOrEmpty } It 'Exec by itself does nothing' {