如何在Powershell中为特定命令设置别名?

5

我经常要输入这个命令:java -jar foo --param1 --param2, --param-n。我该如何创建一个命令别名,以便可以这样运行该命令:

launch_foo --param3

如何将launch_foo翻译成完整的命令?


你需要创建一个函数。 - js2010
2个回答

6

你需要创建一个函数。幸运的是,使用标准参数创建“别名风格”的函数并不难:

Function launch_foo { java -jar foo --param1 --param2 --param-n $args }

现在,您可以使用 launch_foo 或者 launch_foo --param3 来调用该函数。请注意,如果您没有传入任何其他参数,$args 将会是 $null,并且不会对函数中指定的默认参数产生任何影响[1]

现在,在 Powershell 中有别名的概念,但是别名只是命令或 cmdlet 的替代名称,您不能在别名定义中添加参数。您可以将别名用作可执行文件或 cmdlet 的替代名称。以下是一些别名的示例:

Set-Alias v vim
Set-Alias list Get-ChildItem
Set-Alias 2json ConvertTo-Json

v 将运行 vimlist 将运行 Get-ChildItem2json 将运行 ConvertTo-Json[1]


[1] 注意,这仅适用于外部命令。如果您尝试以此方式别名化带参数的 cmdlet 或函数,则将评估为 $null 的参数作为 $null 值,如果未提供,则 $args 会是 $null。根据 cmdlet 的不同,这可能会引发错误,无效果或产生不希望的效果。根据 cmdlet 的不同,您还可能需要展开 @args 以适当传递参数。


为什么无法设置一个带有从输入读取的参数的别名?我使用'gc -readcount -10 -wait path' ALLOT。如果能够设置一个已经准备好所有这些参数的别名,那就太好了... - Patrick Burwell
1
这可能是语言设计上的决策。别名只是一个可供使用的替代名称。包装函数并不太难编写,但我同意如果我们可以轻松地设置带有预定参数的别名会很好。 - codewario

0
你还可以在环境变量PATH所在的任何bin文件夹中创建一个launch_foo.bat文件。
然后在launch_foo.bat文件中放置命令,例如:java -jar foo %1%1是在初始命令之后输入的第一个参数。
现在你可以在Powershell中调用launch_foo --param3命令。对我来说,在Windows上这个解决方案非常有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接