PowerShell,如何输出函数的内容

a7qyws3x  于 2022-11-29  发布在  Shell
关注(0)|答案(1)|浏览(133)

我知道这可以用来查看函数的内容:

cat function:\mkdir

这很好,所以我想使用bat语法突出显示该输出

PS C:\> bat function:\mkdir
function:\mkdir: No such file or directory

我想这可能有用:

PS C:\> bat $(function:\mkdir)
function:\mkdir : The term 'function:\mkdir' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:1 char:7
+ bat $(function:\mkdir)
+        ~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (function:\mkdir:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

这也会失败:

cat function:\mkdir | bat

我做错了什么;我如何用我选择的解析器输出函数内容?
对于某些上下文,这是针对我的函数的,该函数尽可能多地告诉我有关任何cmdlet、函数、别名、模块、外部脚本、应用程序或变量的信息,只需将what指向任何对象,它就会告诉您有关该对象的信息(例如what mkdirwhat what等)。如果路径上有bat,它会使用该路径并将输出着色为PowerShell,如果路径上没有bat,它会使用Get-Contenthttps://gist.github.com/roysubs/20c1bc888383d56df67008f4ba4179cb

c3frrgcw

c3frrgcw1#

使用 * 命名空间变量表示法 *:

# As argument.
bat $function:mkdir

# Via the pipeline
$function:mkdir | bat

注意事项:

  • 如果函式名称包含特殊字符,例如-,请将整个识别项括在{...}中,例如${function:Get-Foo}
  • 顺便说一句:
  • 如前所述,在Windows* 上的PowerShell * 中,catGet-Content的内置别名。相比之下,在 * 类Unix * 平台上的PowerShell中,cat是指标准Unix实用程序(/bin/cat)。

简而言之:

  • $function:mkdir相当于Get-Content function:mkdir
  • 有关详细信息,请参阅this answer
  • 结果是一个[scriptblock]示例,当您将它传递给一个 * 外部程序 * 时,它被隐式地 * 字符串化 *,例如您的例子中的bat
  • 一个脚本块可以方便地将它的 * 逐字内容 * 串化,即串化到它的 * 源代码 *。(在脚本块 * 文字 * -{ ... }的情况下,不包括{})。
  • 命名空间变量表示法仅适用于 literal 函数名;如果必须通过 variable 或表达式提供函数,请使用等效的Get-Content
$cmd = 'mkdir'

# As argument.
bat (Get-Content function:$cmd)

# Via the pipeline
(Get-Content function:$cmd) | bat

相关问题