我正在尝试在PowerShell中设置别名。由于一些奇怪的原因,它们不支持空格(参数),所以我必须创建一个函数来代替
我运行了这个命令:function glo { git log --oneline }
我希望之后我可以使用glo
运行这个。但是运行glo
会导致glo : The term 'git log --oneline' is not recognized as the name of a cmdlet, function, script file, operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again
而不是运行git log --oneline
如何设置此别名?为什么在Powershell中设置别名很困难,而在Linux中使用.zshrc
或.bashrc
文件很容易。
1条答案
按热度按时间o7jaxewo1#
注意:您问题中的函数定义在技术上是正确的,但错误消息表明您使用了 * 不同的 * 函数定义-请参阅底部部分。第一部分包含“一般”信息。
bash
)不同,您*不能在PowerShell alias定义中包含传递参数 *-您确实需要一个function。$args
变量将传递给函数的所有参数**中继到其目标命令行(如果需要)。PowerShell别名-根据设计-只是其他命令的 * 替代名称,**不能 “烘焙”参数-有关别名与PowerShell中的this answer函数。
因此:
@args
而不是$args
,后者是参数splatting的示例,它带有一个 array 变量,将数组的元素 * 作为单独的参数 * 传递给目标命令。git
),这不是绝对必要的,因为$args
也会这么做;但是,如果目标命令是 PowerShell 命令,则只有@args
会单独传递所有参数。git log --oneline
。$PROFILE
**文件中。至于你尝试了什么:
您的问题中的函数定义
function glo { git log --oneline }
实际上是正确的,假设您在调用glo
时不需要支持额外的临时传递参数。但是,您显示的错误消息意味着您将函数定义为:
这是不可能的,因为调用操作符
&
只需要 * 命令名或可执行路径 * 作为它的第一个参数-任何 * 参数 * 都必须单独传递。如果你想在函数定义中使用
&
-这是不必要的,因为命令名git
既没有空格也不是用 * 变量 * 表示的-将函数体定义为:& git log --oneline