在 POSIX shell 中工作时,我可以使用内置命令type
查看可执行文件、shell 函数、内置命令或别名是如何定义的。
例如,我有一个 shell 函数box
,它将在给定的一段文本周围绘制一个 ASCII 框:
$ box "I am the operator of my pocket calculator"
#############################################
# I am the operator of my pocket calculator #
#############################################
我可以看到该函数是如何定义的:
$ type box
box is a function
box ()
{
t="$1xxxx";
c=${2:-#};
echo ${t//?/$c};
echo "$c $1 $c";
echo ${t//?/$c}
}
有 PowerShell 等效函数吗?我特别想看看我在 中定义的 PowerShell 函数$profile
,以及它们是如何定义的——我一直在使用
type $profile
来显示所有这些,但我想要一些更有针对性的东西。(请注意,PowerShell/Cmd 命令type
相当于 Unix cat
,并且是没有任何关系type
对于我所询问的Unix内置函数。)
答案1
并非每个命令都是一个功能。
为了确定你的命令是否确实是一个函数,请输入:
get-command "name of command"
例如:
PS> get-command box_
CommandType Name Version Source
----------- ---- ------- ------
Function Box
现在我们确定它确实是一个函数,你可以像这样看到该函数的内容:
(get-command box).ScriptBlock
也可以看看:https://www.pdq.com/blog/viewing-powershell-function-contents/
就我个人而言,我将以下内容添加到了我的 Powershell 配置文件中:
cls
write-host -ForegroundColor Cyan "Powershell started with custom functions."
write-host -ForegroundColor Cyan "They are: EditCustomFunctions, name1, name2, etc..."
function EditCustomFunctions
{
if (!(Test-Path (Split-Path $profile))) { mkdir (Split-Path $profile) } ; if (!(Test-Path $profile)) { New-Item $profile -ItemType file } ; powershell_ise $profile
}
因此,在 Powershell 中,我只需键入 EditCustomFuctions 即可打开 PowerShell ISE 并使用我的配置文件来编辑函数,并且我的自定义欢迎消息会列出我所有的自定义函数。
答案2
我接受了 LPChip 的回答,因为他给了我所需的确切信息;我在这里添加了一个我实际要使用的 PowerShell 函数——它只是一个在打印之前Get-Command
进行检查的薄包装器。CommandType
ScriptBlock
function showfunc {
param($function_name)
$command=Get-Command "$function_name"
if ($command.CommandType -match "Function") { $command.ScriptBlock }
}