gpt4 book ai didi

powershell - 如何在 PowerShell 中使用别名作为函数参数?

转载 作者:行者123 更新时间:2023-12-05 03:21:40 24 4
gpt4 key购买 nike

例如,我有一个名为“github”的别名。

Set-Alias -Name github -Value "C:\UserName\Folder\github"

我还有一个名为“goto”的函数,例如:

Function goto ( [string] alias ) { Set-Location -Path $alias }

如何在我的终端上使用这个函数作为参数传递一个别名。

> goto github

输出:`无法找到“CurrentLocation\github”文件夹,导致函数无法将别名解析为参数

最佳答案

简单来说,别名只是 与 cmdlet、函数、脚本文件或可执行程序的关联。当我们Set-Alias ,发生的事情是一个新的 AliasInfo instance添加到 Alias: PSDrive - 请参阅 about Alias Provider 了解详情。

因此,回顾一下,当我们这样做时:

Set-Alias -Name github -Value "C:\UserName\Folder\github"

实际发生的是名称为 github 的别名与名称为 C 的函数相关联:\UserName\Folder\github,一个有趣但无用的演示:

PS /> Get-Alias github

CommandType Name Version Source
----------- ---- ------- ------
Alias github -> C:\UserName\Folder\github

PS /> ${function:C:\UserName\Folder\github} = { 'hello' }
PS /> C:\UserName\Folder\github
hello

PS /> github
hello

在我看来,一个简单的解决方法是使用一个函数 (github) 输出包含您要访问的路径的字符串和第二个函数 (goto) 接收管道输入,为此我们使用一个利用 automatic variable $input 的非高级函数:

function goto { Set-Location -Path $input }
function github { 'path\to\something' }

github | goto

Set-Alias 也是 Set-Location 的有效用例因为此 cmdlet 已经接受来自管道的值:

Set-Alias -Name goto -Value Set-Location
function github { 'path\to\something' }

github | goto

或者,JPBlanc建议,在现已删除的答案中:

function goto ([string] $alias) { Set-Location -Path $alias }   
function githubpath { "C:\UserName\Folder\github" }

这也适用于位置参数,但强制使用 grouping operator (..) :

goto (github)

为什么?

如果没有分组运算符,函数 goto 会将 github 视为我们要调用的参数,并且不是单独的函数

运算符强制 github 函数首先调用,或者换句话说,优先并在调用之前生成它的输出调用 goto 函数。

关于powershell - 如何在 PowerShell 中使用别名作为函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72900880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com