Change exec from alias to function to handle arbitrary arguments (#18567)

This commit is contained in:
Steve Lee
2022-11-17 12:14:27 -08:00
committed by GitHub
parent 4ce439ebb7
commit 9ae18ab0d1
3 changed files with 22 additions and 9 deletions
@@ -4078,6 +4078,15 @@ $RawUI.SetBufferContents(
}
}
#if UNIX
internal static string GetExecFunctionText()
{
return @"
Switch-Process -WithCommand $args
";
}
#endif
/// <summary>
/// This is the default function to use for man/help. It uses
/// splatting to pass in the parameters.
@@ -4683,10 +4692,6 @@ end {
new SessionStateAliasEntry("sls", "Select-String"),
};
#if UNIX
builtInAliases.Add(new SessionStateAliasEntry("exec", "Switch-Process"));
#endif
return builtInAliases.ToArray();
}
}
@@ -4716,6 +4721,10 @@ end {
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),
@@ -15,10 +15,10 @@ Describe 'Switch-Process tests for Unix' -Tags 'CI' {
$global:PSDefaultParameterValues = $originalDefaultParameterValues
}
It 'Exec alias should map to Switch-Process' {
$alias = Get-Command exec
$alias | Should -BeOfType [System.Management.Automation.AliasInfo]
$alias.Definition | Should -BeExactly 'Switch-Process'
It 'Exec function should map to Switch-Process' {
$func = Get-Command exec
$func | Should -BeOfType [System.Management.Automation.CommandInfo]
$func.Definition | Should -Not -BeNullOrEmpty
}
It 'Exec by itself does nothing' {
@@ -60,6 +60,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 parameter' {
$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' {
@@ -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), "", "", ""