mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
Change exec from alias to function to handle arbitrary arguments (#18567)
This commit is contained in:
@@ -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), "", "", ""
|
||||
|
||||
Reference in New Issue
Block a user