gpt4 book ai didi

powershell - 在保留 Set-Location 开关的同时扩展 cd 功能

转载 作者:行者123 更新时间:2023-12-03 01:28:21 25 4
gpt4 key购买 nike

我想扩展cd的功能但保留 Set-Location 的所有现有参数.所以我创建了一个函数go它做了一堆额外的东西,然后别名 cd到它(我必须使用 -Option AllScope 才能让它工作,有谁知道为什么我不能在不使用它的情况下重新命名 cd ?)

Set-Alias cd go -Option AllScope

问题是我想要 go做某些事情,但也故障转移到 Set-Location功能每当标准 Set-Location开关被调用:
Set-Location -LiteralPath <String> [-PassThru] [-UseTransaction] [<CommonParameters>]

Set-Location [[-Path] <String>] [-PassThru] [-UseTransaction] [<CommonParameters>]

Set-Location [-PassThru] [-StackName <String>] [-UseTransaction] [<CommonParameters>]

寻求通过创建辅助函数然后以这种方式重新使用内置别名来扩展内置 Cmdlet 功能的建议?即我想要 cd继续做所有的 Set-Location功能,除非我想要的新开关应用于它现在别名的辅助功能?

最佳答案

MikeSh helpfully advises ,代理函数(包装函数)是要走的路:

  • 创建您的go作为Set-Location 的代理(包装器)函数(或脚本)的功能cmdlet,如 this answer 中所示.
  • 将您的自定义功能直接添加到此包装函数中。
  • go那么是同时提供 Set-Location 的单个函数功能和所需的自定义功能,所以 Set-Alias cd go -Option AllScope足够了。

    重要 : 由于您正在修改内置的、 session 范围的别名,请确保您的 go函数是 Set-Location 的真正超集的功能;也就是说,确保它既不修改也不限制原始行为 - 否则,第三方代码可能会出现故障。

    I had to use -Option AllScope to get this to work, does anyone know why I can't just re-alias cd without using that?



    内置别名 cd-Option AllScope 定义;以这种方式定义的任何别名只能在以下情况下修改 -Option AllScope在重新定义时再次指定 Set-Alias .

    原因是 -Option AllScope意味着别名自动出现在任何范围内,这实际上意味着指定的定义适用于 session 范围。

    没有 -Option AllScope , Set-Alias仅在单个范围内创建/修改别名 - 默认情况下是当前范围,或者通过可选 -Scope 定位的范围参数 - 尽管该范围的所有后代范围也看到了定义。

    这与先前存在的 -Option AllScope 相矛盾。给定别名的定义,因此 PowerShell 为您提供了两种解决矛盾的选项:
  • 修改现有的AllScope定义,您必须通过指定发出信号-Option AllScope作为重新定义的一部分,这显然意味着您正在修改别名的 session 范围定义。
  • 删除已有的AllScopeRemove-Alias 定义(这是不可取的,尤其是内置别名),然后允许您创建特定于范围的别名(通过省略 -Option AllScope )。

  • 请注意,如果您创建的别名没有 -Option AllScope ,但在全局范围内(例如,通过您的 $PROFILE 文件或使用 -Scope Global ),效果类似于 -Option AllScope ,鉴于后代范围也可以看到定义,并且所有范围都是全局范围(包括模块)的后代[1]。

    但是,任何后代范围都可以覆盖全局定义。

    [1] 在技术上可以创建不链接到全局范围的范围,但该选项鲜为人知,并且在实践中很少使用。

    关于powershell - 在保留 Set-Location 开关的同时扩展 cd 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60473380/

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